我们使用在“计算器表单”示例中创建的表单来显示,可以在执行应用程序时生成相同的用户界面,或者在构建应用程序时定义相同的用户界面。
Qt技术交流群现已开通,QQ搜索群 “765444821”或即可加入
在运行时从Qt Designer表单创建用户界面。

我们使用在“计算器表单”示例中创建的表单来显示,可以在执行应用程序时生成相同的用户界面,或者在构建应用程序时定义相同的用户界面。
准备
该计算器形式示例定义,我们可以不加修改地使用的用户界面。在此示例中,我们使用资源文件来包含calculatorform.ui在上一个示例中创建的文件,但是可以将其存储在磁盘上。
为了在运行时生成表单,我们需要将示例链接到QtUiTools模块库。我们使用的项目文件包含执行此操作所需的所有必要信息:
HEADERS = calculatorform.hRESOURCES = calculatorbuilder.qrcSOURCES = calculatorform.cpp main.cppQT += widgets uitools
所有其他必要的文件都照常声明。
CalculatorForm类定义
在CalculatorForm类定义用于承载形式的用户界面窗口小部件:
class CalculatorForm : public QWidget{ Q_OBJECTpublic: explicit CalculatorForm(QWidget *parent = nullptr);private slots: void on_inputSpinBox1_valueChanged(int value); void on_inputSpinBox2_valueChanged(int value);private: QSpinBox *ui_inputSpinBox1; QSpinBox *ui_inputSpinBox2; QLabel *ui_outputWidget;};
注意,我们不需要包括头文件来描述用户界面。我们仅使用要求的自动连接命名约定来定义两个公共插槽,uic并声明专用变量,这些专用变量将在构造表单后用于访问表单提供的窗口小部件。
CalculatorForm类的实现
我们将需要使用该库提供的QUiLoader类libQtUiTools,因此我们首先确保我们包含该模块的头文件:
#include <QtUiTools>
构造函数使用表单加载器对象来构造我们通过QFile对象从示例资源中检索的用户界面:
CalculatorForm::CalculatorForm((QWidget *parent)) : : QWidget(parent)parent){{ QUiLoader loader;; QFile file((":/forms/calculatorform.ui"); file.open((QFile::ReadOnly); ); QWidget *formWidget = loader.load((&file, this); file.close();();
通过将用户界面包含在示例的资源中,我们确保在示例运行时将显示该用户界面。该loader.load()函数获取文件中包含的用户界面描述,并将表单窗口小部件构造为的子窗口小部件CalculatorForm。
我们对生成的用户界面中的三个小部件感兴趣:两个旋转框和一个标签。为了方便起见,我们从构造的窗口小部件中检索指向这些窗口小部件的指针FormBuilder,并将它们记录下来以备后用。该qFindChild()模板的功能使我们能够查询控件,以便找到一个名为子部件。
ui_inputSpinBox1 = findChild<QSpinBox*>("inputSpinBox1"); ui_inputSpinBox2 = findChild<QSpinBox*>("inputSpinBox2"); ui_outputWidget = findChild<QLabel*>("outputWidget");
由表单加载器创建的窗口小部件需要连接到CalculatorForm对象中的特殊命名的插槽。我们使用Qt的元对象系统来启用以下连接:
QMetaObject::connectSlotsByName((this);
表单窗口小部件已添加到布局中,并且设置了窗口标题:
QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(formWidget);(formWidget); setLayout(layout);(layout); setWindowTitle(tr((tr("Calculator Builder"));}}
修改表单提供的窗口小部件的两个插槽的定义方式与“计算器表单”示例中的相似,不同之处在于我们从旋转框中读取值并将结果通过构造函数中记录的指针写入输出窗口小部件中。 :
void CalculatorFormCalculatorForm::on_inputSpinBox1_valueChanged((int value)){{ ui_outputWidget->setText((QString::number(value (value + ui_inputSpinBox2->value()));()));}}void CalculatorFormCalculatorForm::on_inputSpinBox2_valueChanged((int value)){{ ui_outputWidget->setText((QString::number(value (value + ui_inputSpinBox1->value()));()));}}
这种方法的优点是,我们可以在运行应用程序时替换表单,但是只要给它们指定适当的名称,我们仍然可以操纵其中包含的窗口小部件。
Qt组件推荐:
- QtitanRibbon| 下载试用: 遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
- QtitanChart | 下载试用 :是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。并且支持所有主要的桌面。
- QtitanNavigation | 下载试用 :模拟Microsoft Dynamics CRM-2016/Office 365导航界面和一组控件改善Qt.C ++应用程序用户体验的QtitanNavigation组件。
====================================================
想要了解或购买Qt正版授权的朋友,欢迎咨询官方客服
Qt技术交流群现已开通,QQ搜索群 “765444821”或者扫描下方二维码即可加入

标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!