Qt 子类中某按键ignore,事件却未传递到父类的问题
最近写界面程序,父类MyWidget中包含几个子类Widget、Dialog,MyWidget中用stackedWidget来切换这几个界面,部分代码如下:
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);
m_Widget = new Widget(ui->stackedWidget);
m_Dialog = new Dialog(ui->stackedWidget);
ui->stackedWidget->addWidget(m_Widget);
ui->stackedWidget->addWidget(m_Dialog);
}
#include <QWidget>
#include "widget.h"
#include "dialog.h"
namespace Ui {
class MyWidget;
}
class MyWidget: public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = 0);
private:
Ui:MyWidget *ui;
Widget *m_Widget;
Dialog *m_Dialog;
};
遇到的问题:m_Dialog在处理按键事件时,Dialog子类中某按键 event->ignore(),事件却未传递到MyWidget类。
调试研究发现,问题出在m_Dialog = new Dialog(ui->stackedWidget)这句的ui->stackedWidget,改成m_Dialog = new Dialog(this)即可。
由于之前界面是在嵌入式仪器上的,看不出问题所在,改成载Windows下调试,问题一下就出来了。
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);
if(1)
{
m_Widget = new Widget(ui->stackedWidget);
m_Dialog = new Dialog(ui->stackedWidget);
}
else
{
m_Widget = new Widget(this);
m_Dialog = new Dialog(this);
}
ui->stackedWidget->addWidget(m_Widget);
ui->stackedWidget->addWidget(m_Dialog);
}
if(1), stackedWidget切换到m_Dialog会重新弹出一个对话框;
if(0),只有一个窗口
QDialog,QStackedWidget的继承关系如下图。
其实其中的原理还是没太明白, 欢迎各位小伙伴、大神加入探讨,答疑解惑。