Мне нужно сделать кнопку GUI, которая сообщает своему родителю (или родителю родителя или даже родителю родителя...), что должен быть показан другой виджет в QStackedLayout
. Я создал собственный QEvent:
class SwitchScreenEventWidget : public QEvent {
public:
SwitchScreenEventWidget(QWidget* w) : SwitchScreenEvent(), widget(w) {
if(widget==nullptr)
throw "SwitchScreenEventWidget received null widget.";
}
virtual QWidget* getWidget() const {;return widget;}
private:
QWidget* const widget;
};
Я вызываю его так:
// Through debugger I checked that this is getting called properly
void GraphButton::buttonClicked()
{
if(qApp!=nullptr && parent()!=nullptr)
qApp->notify(parent(), new SwitchScreenEventWidget(getGraph()));
}
И обрабатывать это так:
bool ViewStack::eventFilter(QEvent* e)
{
if(e->type()>=QEvent::User) {
if(SwitchScreenEvent* event = dynamic_cast<SwitchScreenEvent*>(e)) {
// Show the given widget
}
return true;
}
return false;
}
Я использую eventFilter
, который затем регистрируется в главном виджете приложения. Но событие не фиксируется. Где-то я читал, что некоторые QEvent
просто не всплывают в иерархии.
Так всплывают все события или нет? Если нет, то какие делают, какие нет и почему? И как правильно сделать всплывающее окно события?
accepted
вашего события значение false. - person thuga   schedule 18.01.2016QPushButton
- я хочу, чтобы решение работало независимо от количества родительских узлов, которые есть у кнопки. - person Tomáš Zato - Reinstate Monica   schedule 18.01.2016findChildren<GraphButton*>
в самом верхнем окне и подключите сигнал. - person Sebastian Lange   schedule 18.01.2016