designer QBuilder 怎么理解 QGaphicsProxyWidget?
QFormBuilder 是 Qt 提供的一个类,用于在运行时动态加载和构建由 Qt Designer 创建的 UI 界面。它可以解析 .ui 文件(XML 格式),并生成相应的 QWidget 对象树,从而实现界面的动态创建和修改。
QFormBuilder 是 Qt 提供的用于在运行时根据由 Qt Designer 生成的 .ui(XML)文件构建界面对象树的工具/类。它负责解析 UI 描述并创建相应的 QWidget 及其子控件、布局和属性。
适用场景示例:
// 示例伪代码:运行时加载 UI 并查询子控件
// 打开 .ui 文件
QFile file(":/ui/myform.ui");
if (!file.open(QIODevice::ReadOnly)) {
// 处理错误
}
// 使用运行时加载器(QFormBuilder 或 QUiLoader)构建界面
QWidget *widget = nullptr;
// 假设 builder 是已创建的加载器实例(QFormBuilder/QUiLoader)
widget = builder.load(&file, parentWidget);
file.close();
if (widget) {
// 将 widget 放入界面或布局
parentLayout->addWidget(widget);
// 查找名为 "pushButtonOK" 的子控件,并连接槽
QPushButton *ok = widget->findChild<QPushButton*>("pushButtonOK");
if (ok) connect(ok, &QPushButton::clicked, someReceiver, &SomeClass::onOk);
}
概念:在构建阶段使用 Qt 的 uic(User Interface Compiler)将 .ui 文件转成 C++ 头文件(通常是 ui_<form>.h)或对应语言的源文件,编译后直接使用生成的类以避免运行时解析开销。
典型流程:
CMake 示例:
最小 C++ 使用示例:
// 使用示例(伪代码)
#include "ui_myform.h" // 由 uic 生成
class MyForm : public QWidget {
Q_OBJECT
public:
MyForm(QWidget *parent = nullptr) : QWidget(parent) {
ui.setupUi(this); // 将生成的 UI 绑定到 this
// 现在可以使用 ui.pushButton 等成员或 findChild
connect(ui.pushButtonOK, &QPushButton::clicked, this, &MyForm::onOk);
}
private:
Ui::MyForm ui; // 由 uic 在 ui_myform.h 中定义
};
PyQt / PySide 的编译时等价:
优缺点(简述):
注意事项与提示:
核心功能(简要)
触发与收集 .ui 的方式
生成内容与放置位置
依赖与增量构建
AUTOUIC 与 AUTOMOC/AUTORCC 的配合
常见问题与调试建议
小结