как я могу скрыть виджет, который генерировал сигнал в QT - PullRequest
1 голос
/ 22 мая 2011

Допустим, у нас более одного виджета, и у всех них есть кнопка главного меню. поэтому я подключил все кнопки основного меню к нажатому сигналу к одному слоту, который должен быть h

connect(widget1->mainMenuButton, SIGNAL(clicked()),this, SLOT(mainClicked()));
connect(widget1->mainMenuButton, SIGNAL(clicked()),this, SLOT(mainClicked()));

а у меня

private slots:
    void mainClicked();

в mainClicked Я хочу скрыть того, кто вызвал нажатый сигнал. frame1 или frame2 в приведенном выше примере.

Я мог бы использовать sender (), чтобы получить QObject, который вызвал сигнал, но тогда как я могу вызвать hide, которая является функцией QWidget?

Ваша помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 22 мая 2011

Я думаю, что это должно работать:

dynamic_cast<QWidget*>(sender()) -> hide() ;
0 голосов
/ 22 мая 2011

Взгляните на класс QSignalMapper. По сути, вы подключаете сигнал clicked() вашего двух виджетов к слоту map() преобразователя сигналов, и он излучает один сигнал mapped(QWidget*), который подключается к вашему слоту mainClicked(QWidget*), и вы получаете переданный виджет, который испускает clicked сигнал (на самом деле вы можете настроить параметр самостоятельно). Документация Qt может рассказать вам больше.

...