需求
需要将一个QMainWindow类型的界面,添加到QWidget中。
方案
因为QMainWindow类继承自QWidget类,可使用addWidget添加到界面中。
MainWindow *mw = new MainWindow(this);//创建对象,并指定父窗口(可以让Qt管理内存)
ui->gridLayout->addWidget(mw);//添加到Layout中
问题
运行上面代码,QMainWindow的界面没有显示。
方法1(推荐)
配置QMainWindow对象的WindowFlags为Qt::Widget。
MainWindow *mw = new MainWindow(this);//创建对象,并指定父窗口(可以让Qt管理内存)
mw->setWindowFlags(Qt::Widget);//修改窗口为Widget属性
ui->gridLayout->addWidget(mw);//添加到Layout中
方法2
不指定QMainWindow的父窗口。
MainWindow *mw = new MainWindow();//创建对象
ui->gridLayout->addWidget(mw);//添加到Layout中
扩展
Qt的部分界面控件,添加QMainWindow为子部件时,不需要配置QMainWindow对象的WindowFlags为Qt::Widget,同样可以使用。
仅测试以下:
- QTabWidget
- QStackedWidget
结论
使用方法1或方法2,可以解决QMainWindow添加到QWidget中不显示的问题。
关于QMainWindow不显示的原因,猜测可以与WindowFlags属性及对应的逻辑有关。
保留疑问,希望有人解答,多谢!!!