Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.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 @

тоже хотела так написать, а потом смотрю, мой союзник

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)