#qt #hide #signals #qwidget #generated
#qt #скрыть #сигналы #qwidget #сгенерированный
Вопрос:
Допустим, у нас есть более одного виджета, и все они имеют кнопку главного меню. итак, я подключил все кнопки главного меню clicked signal к одному слоту, который должен иметь
connect(widget1->mainMenuButton, SIGNAL(clicked()),this, SLOT(mainClicked()));
connect(widget1->mainMenuButton, SIGNAL(clicked()),this, SLOT(mainClicked()));
и у меня есть
private slots:
void mainClicked();
в mainClicked я хочу скрыть того, кто вызвал сигнал clicked. frame1 или frame2 в приведенном выше примере.
Я мог бы использовать sender () для извлечения QObject, который вызвал сигнал, но тогда как я могу вызвать hide, который является функцией QWidget?
я ценю вашу помощь.
Ответ №1:
Я думаю, это должно сработать:
dynamic_cast<QWidget*>(sender()) -> hide() ;
Комментарии:
1. спасибо, что я сделал это QObject caller = sender()-> parent(); ((QWidget )caller)-> hide(); потому что отправитель был бы дочерним элементом виджета
2. qobject_cast<QWidget *>(отправитель())-> window()-> hide(); если вы хотите скрыть все окно отправителя
Ответ №2:
Взгляните на QSignalMapper
класс. По сути, вы подключаете clicked()
сигнал ваших двух виджетов к map()
слоту преобразователя сигналов, и он выдает один mapped(QWidget*)
сигнал, который вы подключаете к своему mainClicked(QWidget*)
слоту, и вы получаете переданный виджет, который излучал clicked
сигнал (на самом деле вы можете настроить параметр самостоятельно). Документация Qt может рассказать вам больше.