• 10132阅读
  • 2回复

在Qt设计师中集成自定义窗口 [复制链接]

上一主题 下一主题
离线chai2010
 

只看楼主 正序阅读 楼主  发表于: 2008-09-27
— 本帖被 XChinux 执行加亮操作(2008-09-28) —
在在Qt设计师中不能想使用标准窗口控件那样使用自定义窗口。
在《C++ GUI Qt7 编程》中提供了2中方法:改进法和插件法。

改进法局限比较多,只有在自定义窗口有相似的标准窗口时才
好使用。插件法相对比较完美,可以将自定义窗口集成到界面
设计师中。但是插件法需要用户编写很多代码。

经过多次思考,笔者发现一个更方便的方法。就是在需要自定义
窗口的地方先用QWidget代替,然后在代码中将自定义窗口放到一个
布局中,最后将改布局设置到QWidget对象。

比如用设计师设计了一个主窗口程序,保存为mainwindow.ui,ui中
主窗口对象名为MainWindow。我们要将主窗口的中心窗口替换为一个
GLWidget,用于显示一个OpenGL场景。

我们可以用下面代码将mainwindow.ui导出:

  1. // MainWindow.h
  2. #include <QMainWindow>
  3. #include "ui_mainwindow.h"
  4. #include "GLWidget.h"
  5. class MainWindow : public QMainWindow
  6. {
  7.     Q_OBJECT
  8.    
  9. public:
  10.     MainWindow(QWidget *parent = 0);
  11.    
  12. private:
  13.     // 设计师生成的窗口
  14.     Ui::MainWindow ui;
  15.    
  16.     // 自定义窗口
  17.    
  18.     GLWidget *m_myGLWidget;
  19. };
  20. // MainWindow.cpp
  21. #include "MainWindow.h"
  22. #include <QtGui>
  23. MainWindow::MainWindow(QWidget *parent)
  24.     : QMainWindow(parent)
  25. {
  26.     ui.setupUi(this);
  27.    
  28.     // 创建自定义窗口
  29.    
  30.     m_myGLWidget = new GLWidget();
  31.    
  32.     // 通过布局将自定义窗口添加到UI中
  33.    
  34.     QHBoxLayout *lay = new QHBoxLayout;
  35.     lay->addWidget(m_myGLWidget);
  36.     ui.centralwidget->setLayout(lay);
  37.    
  38.     // 设置和m_myGLWidget相关的信号槽
  39. }


这样我们就可以很容易将自定义窗口和界面设计师生成的ui结合
在一起了 :)

离线lazybone
只看该作者 2楼 发表于: 2008-09-28
未用到
离线xjcook

只看该作者 1楼 发表于: 2008-09-28
是个好方法,学习了.
快速回复
限100 字节
 
上一个 下一个