Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Гурман от Июль 12, 2011, 18:16



Название: QPlainTextEdit в табе получает сигнал changed() непонятно откуда
Отправлено: Гурман от Июль 12, 2011, 18:16
код приводить не буду, поскольку его сюда относится довольно много, и из разных классов

конструкция такая - в окне есть несколько кнопок, под ними табвиджет, на нем табы, в каждом табе текстовый редактор

кнопки над табами обычные для редактора - сохранить, сохранить как, анду, реду и т.д...

при смене таба сигналы clicked() от кнопок привязываются к тому редактору, который в новом табе - так сделано, чтобы не плодить одинаковые нопки в каждом табе, и кроме этого, кнопки рисуются в дизайнере, а табы добавляются динамически

все это замечательно работает, за исключением одного непонятного момента: при переключении таба непонятно по какой причине редактор (а именно объект класса QPlainTextEdit) испускает свой сигнал textChanged(), причем это уже после всего-всего, после того, как текст в него загружен, после того, как подсветка синтаксиса ему установлена (подсвечиватель один, и он привязывается к редактору в выбраном табе), даже после того, как все кнопки к нему подключены

этот сигнал у меня подключен к слоту класса QPlainTextEdit::SourceEdit, который переключает состояние кнопок с "недоступно" на "доступно", и вот в результате они некорректно работают - можно сохранить измененный текст, они становятся недоступны, но достаточно переключить табы, и кнопки снова светятся...

как это побороть, пока не знаю, может кто с таким сталкивался? откуда и почему вылетает этот сигнал? ведь текст не меняется, форматирование не меняется, меняется только ТАБ, в котором этот текст находится, и текст становится видим на экране


Название: Re: QPlainTextEdit в табе получает сигнал changed() непонятно откуда
Отправлено: Гурман от Июль 12, 2011, 18:33
блин, по стеку выяснил, что это связано с QSyntaxHighlighter, после выполнения подсветки он внутри себя сигнализирует, что редактирование завершено, и в конце концов вылетает этот сигнал... получается, что в нем нет никакой пользы, поскольку подсветка синтаксиса является редактирующей операцией, хотя это, разумеется, совершенно не так

вот бред...  :(


Название: Re: QPlainTextEdit в табе получает сигнал changed() непонятно откуда
Отправлено: Гурман от Июль 12, 2011, 19:06
фух... вместо changedText() надо использовать для того же самого сигнал modificationGanged(bool), хоть бы предупредили в документации


Название: Re: QPlainTextEdit в табе получает сигнал changed() непонятно откуда
Отправлено: Авварон от Июль 13, 2011, 07:48
вполне очевидно, хз


Название: Re: QPlainTextEdit в табе получает сигнал changed() непонятно откуда
Отправлено: Гурман от Июль 13, 2011, 14:19
очевидно было бы, если бы textChanged() называлась бы changedTextOrAttribs() а modificationChanged() называлась textChanged(), или хотя бы в документации было упомянуто, что textChanged сигналит об изменениях самого текста или его атрибутов, а еще логичнее было бы разделить attribsChanged() и textChanged()