计算器表单
在应用程序中使用通过Qt Widgets Designer 创建的表单。
“计算器表单”示例演示了如何通过使用QWidget 子类的用户界面信息,在应用程序中使用通过Qt Widgets Designer 创建的表单。

该示例展示了两个用于输入整数值的旋转框,以及一个显示其和的标签。每当任一旋转框更新时,控件与表单之间的信号-槽连接会确保标签也随之更新。
准备工作
本示例的用户界面完全采用Qt Widgets Designer 设计而成。生成的UI文件描述了表单、所使用的控件、它们之间的信号-插槽连接以及其他标准用户界面属性。
为确保示例能使用该文件,我们需要启用CMAKE_AUTOUIC 功能,并在源文件中列出该UI文件:
set(CMAKE_AUTOUIC ON)
qt_add_executable(calculatorform
calculatorform.cpp calculatorform.h calculatorform.ui
main.cpp
)对于qmake ,我们需要在示例的项目文件中包含FORMS 声明:
FORMS = calculatorform.ui项目构建时,uic 将生成一个头文件,用于构建该窗体。
CalculatorForm 类定义
CalculatorForm 类使用calculatorform.ui 文件中描述的用户界面。要访问该表单及其内容,我们需要包含由uic 在构建过程中生成的ui_calculatorform.h 头文件:
#include "ui_calculatorform.h"我们通过继承QWidget 来定义CalculatorForm 类,因为该表单本身基于QWidget :
class CalculatorForm : public QWidget
{
Q_OBJECT
public:
explicit CalculatorForm(QWidget *parent = nullptr);
private slots:
void updateResult();
private:
Ui::CalculatorForm ui;
};除构造函数外,该类还包含一个私有槽updateResult() ,用于执行计算并相应地更新输出控件。私有成员变量ui 指向该表单,用于访问用户界面的内容。
CalculatorForm 类的实现
构造函数仅调用基类的构造函数,设置表单的用户界面,并将信号QSpinBox::valueChanged() 连接到槽updateResult() 。
CalculatorForm::CalculatorForm(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
connect(ui.inputSpinBox1, &QSpinBox::valueChanged, this, &CalculatorForm::updateResult);
connect(ui.inputSpinBox2, &QSpinBox::valueChanged, this, &CalculatorForm::updateResult);
}用户界面通过 `setupUI() ` 函数进行设置。我们将 `this ` 作为该函数的参数传递,以便将 `CalculatorForm ` 小部件本身用作用户界面的容器。
槽updateResult() 负责将各值相加,并将结果显示在输出控件上:
void CalculatorForm::updateResult()
{
const int sum = ui.inputSpinBox1->value() + ui.inputSpinBox2->value();
ui.outputWidget->setText(QString::number(sum));
}每当其中一个旋转框的值发生变化时,该插槽就会被调用。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.