彩票走势图

Qt开发案例:如何设计一个计算器?

翻译|使用教程|编辑:鲍佳佳|2021-05-11 10:34:37.030|阅读 235 次

概述:我们使用在“计算器表单”示例中创建的表单来显示,可以在执行应用程序时生成相同的用户界面,或者在构建应用程序时定义相同的用户界面。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

Qt技术交流群现已开通,QQ搜索群号“765444821”或即可加入

Qt是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中非常有用。而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式设备,Android(Necessitas)和iOS的端口上运行。现在我们为你提供了免费的试用版。

下载Qt6最新试用版

在运行时从Qt Designer表单创建用户界面。


我们使用在“计算器表单”示例中创建的表单来显示,可以在执行应用程序时生成相同的用户界面,或者在构建应用程序时定义相同的用户界面。

准备

该计算器形式示例定义,我们可以不加修改地使用的用户界面。在此示例中,我们使用资源文件来包含calculatorform.ui在上一个示例中创建的文件,但是可以将其存储在磁盘上。

为了在运行时生成表单,我们需要将示例链接到QtUiTools模块库。我们使用的项目文件包含执行此操作所需的所有必要信息:

HEADERS     = calculatorform.h
RESOURCES   = calculatorbuilder.qrc
SOURCES     = calculatorform.cpp \
              main.cpp
QT += widgets uitools

所有其他必要的文件都照常声明。

CalculatorForm类定义

在CalculatorForm类定义用于承载形式的用户界面窗口小部件:

class CalculatorForm : public QWidget
{
    Q_OBJECT

public:
    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或者扫描下方二维码即可加入


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP