qt 怎么根据ui文件动态创建QWIdget窗口部件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt 怎么根据ui文件动态创建QWIdget窗口部件?相关的知识,希望对你有一定的参考价值。

动态对话框是在程序运行时用 Qt Designer 的.ui 文件创建。不用 uic工具把.ui 文件变成
等价的 c++代码,而是在程序时使用类 QUiLoader 加载.ui文件,例如下面的代码:
QUiLoader uiLoader;
QFile file("sortdialog.ui");
QWidget *sortDialog = uiLoader.load(&file);
if (sortDialog)
...

子控件可以用 QObject::findChild<T>()得到
QComboBox *primaryColumnCombo =
sortDialog->findChild<QComboBox *>("primaryColumnCombo");
if (primaryColumnCombo) ...

findChild<T>()是模板成员函数,得到类型为 T 的给定名字的子控件的指针。由于编
译器的原因,用 MSVC6 是得不到的。如果使用的是 MSVC6,那么可以使用全局函数
qFindChild<T>()。
QUiLoader 类在一个单独的链接库中,如果在一个应用程序中使用了 QUiLoader,
必须在这个程序的.pro文件中添加下面这样的代码:
CONFIG += uitools
使用动态对话框不用重新编译程序就能够改变对话框的布局。
参考技术A qmake -project
qmake
make
qt使用uic工具对xxx.ui文件进行分析,并生成相应的ui_xxx.h文件
例如你用qt designer新建了一个名为test.ui的文件,你可以使用命令行方式
(window下)或者终端(Linux下)输入下面这行语句并执行
uic -o ui_test.h test.ui
执行完成后,ui_test.h中即使生成的头文件的代码。
而qt自动生成ui头文件是在make这一步骤中完成的。
qt的编译过程可以分成三个部分,每个步骤的执行语句如下所示
qmake -project
该步骤生成相应的工程文件 xxx.pro
qmake
该步骤生成Makefile,以及其他的相关文件以及文件夹;
make
该步骤会执行Makefile调用3个工具进行相关的处理:
如果存在信号和槽,将调用moc生成相应的moc文件,对信号和槽进行关联;
如果存在ui文件,将调用uic生成相应的ui头文件;
如果存在资源文件,将调用rcc生成相应的资源文件;
完成以上步骤之后开始进行编译链接等步骤,生成可执行程序。
参考技术B ui文件是根据form文件自动生成的C++文件,form文件通过designer编辑。

Qt QListwidget为啥信号没用

参考技术A 头文件里的
private:
Ui::MainStartUI ui;
这里的ui应该是指针——Ui::MainStartUI *ui;

源文件里——
CMainStartUI::CMainStartUI(QWidget *parent /* = 0 */) : QWidget(parent)
应该改成这样——
CMainStartUI::CMainStartUI(QWidget *parent /* = 0 */) : QWidget(parent), ui(new Ui::MainStartUI)
应该初始化头文件里的私有的Ui::MainStartUI *ui;

以上是关于qt 怎么根据ui文件动态创建QWIdget窗口部件?的主要内容,如果未能解决你的问题,请参考以下文章

Qt中如何添加UI

Qt之UI文件设计和运行机制

QT 做图片缩略显示 滚动条下拉 怎么实现动态加载下面的图片?

Qt中怎样将一个子窗口填充满父窗口,比如,一个QTreeWidget窗口覆盖在一个QWidget窗口上,谢谢

VS+Qt QUiLoader动态加载.ui文件

Qt系列文章之三十七(基于QWidget 创建和使用静态链接库)