在在Qt设计师中不能想使用标准窗口控件那样使用自定义窗口。
在《C++ GUI Qt7 编程》中提供了2中方法:改进法和插件法。
改进法局限比较多,只有在自定义窗口有相似的标准窗口时才
好使用。插件法相对比较完美,可以将自定义窗口集成到
界面设计师中。但是插件法需要用户编写很多代码。
经过多次思考,笔者发现一个更方便的方法。就是在需要自定义
窗口的地方先用QWidget代替,然后在代码中将自定义窗口放到一个
布局中,最后将改布局设置到QWidget对象。
比如用设计师设计了一个主窗口程序,保存为mainwindow.ui,ui中
主窗口对象名为MainWindow。我们要将主窗口的中心窗口替换为一个
GLWidget,用于显示一个OpenGL场景。
我们可以用下面代码将mainwindow.ui导出:
- // MainWindow.h
- #include <QMainWindow>
- #include "ui_mainwindow.h"
- #include "GLWidget.h"
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
-
- public:
- MainWindow(QWidget *parent = 0);
-
- private:
- // 设计师生成的窗口
- Ui::MainWindow ui;
-
- // 自定义窗口
-
- GLWidget *m_myGLWidget;
- };
- // MainWindow.cpp
- #include "MainWindow.h"
- #include <QtGui>
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- {
- ui.setupUi(this);
-
- // 创建自定义窗口
-
- m_myGLWidget = new GLWidget();
-
- // 通过布局将自定义窗口添加到UI中
-
- QHBoxLayout *lay = new QHBoxLayout;
- lay->addWidget(m_myGLWidget);
- ui.centralwidget->setLayout(lay);
-
- // 设置和m_myGLWidget相关的信号槽
- }
这样我们就可以很容易将自定义窗口和界面设计师生成的ui结合
在一起了 :)