Russian Qt Forum
Сентябрь 21, 2024, 16:43
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
QPlainTextEdit в табе получает сигнал changed() непонятно откуда
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QPlainTextEdit в табе получает сигнал changed() непонятно откуда (Прочитано 3193 раз)
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
QPlainTextEdit в табе получает сигнал changed() непонятно откуда
«
:
Июль 12, 2011, 18:16 »
код приводить не буду, поскольку его сюда относится довольно много, и из разных классов
конструкция такая - в окне есть несколько кнопок, под ними табвиджет, на нем табы, в каждом табе текстовый редактор
кнопки над табами обычные для редактора - сохранить, сохранить как, анду, реду и т.д...
при смене таба сигналы clicked() от кнопок привязываются к тому редактору, который в новом табе - так сделано, чтобы не плодить одинаковые нопки в каждом табе, и кроме этого, кнопки рисуются в дизайнере, а табы добавляются динамически
все это замечательно работает, за исключением одного непонятного момента: при переключении таба непонятно по какой причине редактор (а именно объект класса QPlainTextEdit) испускает свой сигнал textChanged(), причем это уже после всего-всего, после того, как текст в него загружен, после того, как подсветка синтаксиса ему установлена (подсвечиватель один, и он привязывается к редактору в выбраном табе), даже после того, как все кнопки к нему подключены
этот сигнал у меня подключен к слоту класса QPlainTextEdit::SourceEdit, который переключает состояние кнопок с "недоступно" на "доступно", и вот в результате они некорректно работают - можно сохранить измененный текст, они становятся недоступны, но достаточно переключить табы, и кнопки снова светятся...
как это побороть, пока не знаю, может кто с таким сталкивался? откуда и почему вылетает этот сигнал? ведь текст не меняется, форматирование не меняется, меняется только ТАБ, в котором этот текст находится, и текст становится видим на экране
Записан
2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: QPlainTextEdit в табе получает сигнал changed() непонятно откуда
«
Ответ #1 :
Июль 12, 2011, 18:33 »
блин, по стеку выяснил, что это связано с QSyntaxHighlighter, после выполнения подсветки он внутри себя сигнализирует, что редактирование завершено, и в конце концов вылетает этот сигнал... получается, что в нем нет никакой пользы, поскольку подсветка синтаксиса является редактирующей операцией, хотя это, разумеется, совершенно не так
вот бред...
Записан
2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: QPlainTextEdit в табе получает сигнал changed() непонятно откуда
«
Ответ #2 :
Июль 12, 2011, 19:06 »
фух... вместо changedText() надо использовать для того же самого сигнал modificationGanged(bool), хоть бы предупредили в документации
Записан
2^7-1 == 127, задумайтесь...
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: QPlainTextEdit в табе получает сигнал changed() непонятно откуда
«
Ответ #3 :
Июль 13, 2011, 07:48 »
вполне очевидно, хз
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: QPlainTextEdit в табе получает сигнал changed() непонятно откуда
«
Ответ #4 :
Июль 13, 2011, 14:19 »
очевидно было бы, если бы textChanged() называлась бы changedTextOrAttribs() а modificationChanged() называлась textChanged(), или хотя бы в документации было упомянуто, что textChanged сигналит об изменениях самого текста или его атрибутов, а еще логичнее было бы разделить attribsChanged() и textChanged()
Записан
2^7-1 == 127, задумайтесь...
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...