Russian Qt Forum
Сентябрь 21, 2024, 16:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPlainTextEdit в табе получает сигнал changed() непонятно откуда  (Прочитано 3193 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Июль 12, 2011, 18:16 »

код приводить не буду, поскольку его сюда относится довольно много, и из разных классов

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

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

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

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

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

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

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #1 : Июль 12, 2011, 18:33 »

блин, по стеку выяснил, что это связано с QSyntaxHighlighter, после выполнения подсветки он внутри себя сигнализирует, что редактирование завершено, и в конце концов вылетает этот сигнал... получается, что в нем нет никакой пользы, поскольку подсветка синтаксиса является редактирующей операцией, хотя это, разумеется, совершенно не так

вот бред...  Грустный
Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #2 : Июль 12, 2011, 19:06 »

фух... вместо changedText() надо использовать для того же самого сигнал modificationGanged(bool), хоть бы предупредили в документации
Записан

2^7-1 == 127, задумайтесь...
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Июль 13, 2011, 07:48 »

вполне очевидно, хз
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #4 : Июль 13, 2011, 14:19 »

очевидно было бы, если бы textChanged() называлась бы changedTextOrAttribs() а modificationChanged() называлась textChanged(), или хотя бы в документации было упомянуто, что textChanged сигналит об изменениях самого текста или его атрибутов, а еще логичнее было бы разделить attribsChanged() и textChanged()
Записан

2^7-1 == 127, задумайтесь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.121 секунд. Запросов: 23.