Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Кроссплатформенный C/C++: cl/gcc/Qt/Gtk+/WxWidgets > Qt, как получить указатель на окно |
Автор: Sander 06.09.19, 08:34 |
Добрый день. Подскажите, а то никак понять не могу. Есть форма на ней разные элементы: QGroupBox в них QLineEdit, все это внутри панелей. А QLineEditEx у меня потомок от QLineEdit. В нем я обрабатываю сигнал TextChanged и нужно послать сигнал ФОРМЕ! о том что текст изменился. А после вызова parent() он дает указатели на QGroupBox. Пытался использовать QApplication::activeWindow() но тоже не работает. При попытке передать в класс QLineEditEx указатель на ФОРМУ происходит крах. |
Автор: YuriyRusinov 06.09.19, 09:00 |
Здесь есть ошибка в проектировании структуры SIGNAL-SLOT. Из того, что есть необходимость обработки сигнала в дочернем виджете, не вытекает необходимость делать производный класс от типа этого виджета <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> QLineEdit * le = new QLineEditEx(); connect (le, &QLineEdit::textChanged, this, &<Тип формы>::<нужный слот> ); |
Автор: Sander 06.09.19, 09:07 |
Мне из класса нужно послать сигнал о том, что содержимое изменилось. А так я раньше просто в форме определял обработку textChanged каждого текстового элемента, но вот подумалось что проще в классе один раз прописать чем делать десятки вызовов это функции. |
Автор: YuriyRusinov 06.09.19, 09:21 |
Не проще, на форме может быть куча дочерних виджетов, которые сами могут содержать уже свои дочерние виджеты, уровень вложенности не ограничен. Наследование от QLineEdit с расширенной обработкой определенного сигнала базового класса приводит к тому, что сигнал будет обработан в самом классе, а последующие слоты уже могут быть не задействованы. Таким образом в обработчике сигнала, прописанном в QLineEditEx, после обработки снова делать emit textChanged, что в свою очередь может привести к рекурсии. |
Автор: Sander 06.09.19, 10:04 |
Извиняюсь, еще раз все перепроверил и оказалось что QApplication::activeWindow() нормально получает сигнал об изменении. Виной всему моя не внимательность |
Автор: luc4luch 16.10.19, 09:47 |
Цитата YuriyRusinov @ тоже хотела так написать, а потом смотрю, мой союзник |