Название: textEdited для QTextEdit'a Отправлено: blood_shadow от Октября 17, 2011, 17:33 Добрый день,
Есть такой полезный метод для QLineEdit textEdited(), как сделать такое же для QTextEdit или для его QTextDocument() textChanged() не подходить, он генерируется и при QTextEdit::setText(), мне нужно чтобы сигнал генерировался только когда пользователь редактировал. Спасибо Название: Re: textEdited для QTextEdit'a Отправлено: blood_shadow от Октября 20, 2011, 13:46 Короче ненашел я ничего подходящего и склепал свою реализацию textEdited() для QTextEdit,
все это красиво обернуто в класс от которого можно унаследоваться: Код
Если есть какие-то предложения по улучшению или нашли ошибки - пишите я буду только рад :) Название: Re: textEdited для QTextEdit'a Отправлено: kambala от Октября 20, 2011, 15:17 какое-то странное название класса ты дал - из него нельзя догадаться, что в него можно текст вводить
судя по реализации, если я нажму кнопку перемещения (стрелки, Page Up, Page Down, Home, End), то сигнал тоже будет отправлен не вижу особого смысла выделять комбинацию Ctrl+V, если у тебя и так все нажатия с контролом не отправляют сигнал Название: Re: textEdited для QTextEdit'a Отправлено: blood_shadow от Октября 20, 2011, 15:44 какое-то странное название класса ты дал - из него нельзя догадаться, что в него можно текст вводить эт я не поменял со своей реализации, у меня 2 текст эдита наследуется от AbstractFileView, эдиты служат как представление и отображают текст файла построчно, который хранится в модели. я не настаиваю на лицензии, изменять можно как угодно :) Цитировать судя по реализации, если я нажму кнопку перемещения (стрелки, Page Up, Page Down, Home, End), то сигнал тоже будет отправлен это было влом разбираться что может привести к редактированию, а что нет, пока времени нет, потом допилю Цитировать не вижу особого смысла выделять комбинацию Ctrl+V, если у тебя и так все нажатия с контролом не отправляют сигнал а тут как раз смысл есть, модификаторы нажаты "сами по себе" не отправляют сигнал, но если нажат любой другой модификатор (только не Ctrl), и при удерживании его поступает нажатие любой другой клавиши то комбинация выпускает сигнал, сами по себе сочетания ctrl + "any Key" не дают модификации, в отличии от shift + "any Key" or alt+ "any Key", но тут есть особый случай ctrl + V, который дает модификацию, но эта комбинация вызывает insertFromMimeData() в которой и эмитится сигнал Надеюсь ясно выразился :) Название: Re: textEdited для QTextEdit'a Отправлено: Авварон от Октября 22, 2011, 13:19 Есть предложения. Читать доку.
http://doc.qt.nokia.com/latest/qtextdocument.html#modified-prop Или даже http://doc.qt.nokia.com/stable/qtextdocument.html#contentsChanged Чтоб совсем не изобретать ласипед. Название: Re: textEdited для QTextEdit'a Отправлено: Igors от Октября 22, 2011, 14:47 Мне кажется велосипед сконструирован неверно. Лезть в разборки клавиш и всевозможных комбинаций - дело гиблое, сколько не допиливай. Я бы попытался "одеть" вызовы setText в какую-то оболочку.
Есть предложения. Читать доку. Читать конечно надо, никто не спорит. Но есть опасность слишком уж увлечься чтением :)... Чтоб совсем не изобретать ласипед. Название: Re: textEdited для QTextEdit'a Отправлено: blood_shadow от Октября 22, 2011, 17:41 Есть предложения. Читать доку. http://doc.qt.nokia.com/latest/qtextdocument.html#modified-prop Или даже http://doc.qt.nokia.com/stable/qtextdocument.html#contentsChanged Чтоб совсем не изобретать ласипед. пробовал я эти все варианты, но они не работают, к примеру ф-ция setText() вызывает сигнал textChanged() если прицепить этот сигнал к слоту, например вот так: Код и определить слот вот так: Код
то не важно при модифицировании пользователем, то ли при вызове setText(), всеравно мы получим "Modified by user" qt 4.7.3 Название: Re: textEdited для QTextEdit'a Отправлено: blood_shadow от Октября 22, 2011, 17:44 Мне кажется велосипед сконструирован неверно. Лезть в разборки клавиш и всевозможных комбинаций - дело гиблое, сколько не допиливай. Я бы попытался "одеть" вызовы setText в какую-то оболочку. setText всеравно генерирует textChanged() как огда различать это был пользователь или программа?Название: Re: textEdited для QTextEdit'a Отправлено: Igors от Октября 22, 2011, 17:50 setText всеравно генерирует textChanged() как огда различать это был пользователь или программа? С помощью "оболочки" Вы сможете знать "откуда". Название: Re: textEdited для QTextEdit'a Отправлено: Авварон от Октября 22, 2011, 23:23 QObject::blockSignals или как-то так.
Название: Re: textEdited для QTextEdit'a Отправлено: blood_shadow от Октября 22, 2011, 23:38 QObject::blockSignals или как-то так. помойму, это не покатит, эдит же у нас один, а если мы заблочим сигналы, то произойдет:Код: If block is true, signals emitted by this object are blocked (i.e., emitting a signal will not invoke anything connected to it). то есть не при редактировании, не при setText() вообще никакого textChanged() не будет, или я что-то не понял? Название: Re: textEdited для QTextEdit'a Отправлено: blood_shadow от Октября 22, 2011, 23:39 setText всеравно генерирует textChanged() как огда различать это был пользователь или программа? С помощью "оболочки" Вы сможете знать "откуда". ибо я знаю только sender() а он будет одинаковым для одного и того же текст эдита Название: Re: textEdited для QTextEdit'a Отправлено: Igors от Октября 23, 2011, 09:14 Неплохо и с blockSignals
Код А можно и так Код А в слотe привести sender'а к MyEditText и посмотреть его флаг небольшой пример в студию... Лучше сказать "а можно пример?"Название: Re: textEdited для QTextEdit'a Отправлено: blood_shadow от Октября 23, 2011, 17:34 Неплохо и с blockSignals Код
спасибо, сделал так :) |