「Qt Widget中文示例指南」如何创建一个计算器?(三)

Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。

本文将展示如何使用信号和槽来实现计算器小部件的功能,以及如何使用QGridLayout在网格中放置子小部件。在上文中(点击这里回顾>>),我们为大家介绍了Calculator类的定义和实现,接下来的内容将主要介绍计算器中Button类的定义和实现!持续关注我们,有更多实用示例介绍哦~

点击获取Qt Widget组件下载(Q技术交流:166830288)

Button类定义

现在让我们来看看Button类:

class Button : public QToolButton
{
Q_OBJECT

public:
explicit Button(const QString &text, QWidget *parent = nullptr);

QSize sizeHint() const override;
};

Button类有一个方便的构造函数,它接受一个文本标签和一个父小部件,并且它重新实现了QWidget::sizeHint() ,以在文本周围提供比QToolButton更多的空间。

Button类实现
Button::Button(const QString &text, QWidget *parent)
: QToolButton(parent)
{
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
setText(text);
}

按钮的外观由计算器小部件的布局通过布局子小部件的大小和大小策略决定,在构造函数中调用setSizePolicy()函数确保按钮将水平展开来填充所有空间;默认情况下,QToolButtons不会展开来填充可用空间。如果没有这个调用,同一列中的不同按钮将具有不同的宽度。

QSize Button::sizeHint() const
{
QSize size = QToolButton::sizeHint();
size.rheight() += 20;
size.rwidth() = qMax(size.width(), size.height());
return size;
}

在sizeHint()中,我们尝试返回一个适合大多数按钮的大小。重用基类(QToolButton)的大小提示,但以以下方式修改它:

  • 将20添加到尺寸提示的高度组件中。
  • 让大小提示的宽度分量至少和高度分量一样多。

这确保了对于大多数字体、数字和操作符按钮将是方形的,不会截断Backspace、Clear和Clear All按钮上的文本。

下面的屏幕截图显示了如果我们没有在构造函数中将水平大小策略设置为QSizePolicy:: expand,并且没有重新实现QWidget::sizeHint(),那么Calculator小部件将是什么样子。

Qt Widget中文示例指南图集

带有默认大小策略和大小提示的计算器示例

Qt Widget组件推荐
  • QtitanRibbon - Ribbon UI组件:是一款遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,QtitanRibbon致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
  • QtitanChart - Qt类图表组件:是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。
  • QtitanDataGrid - Qt网格组件:提供了一套完整的标准 QTableView 函数和传统组件无法实现的独特功能。使您能够将不同来源的各类数据加载到一个快速、灵活且功能强大的可编辑网格中,支持排序、分组、报告、创建带状列、拖放按钮和许多其他方便的功能。
  • QtitanDocking:允许您像 Visual Studio 一样为您的伟大应用程序配备可停靠面板和可停靠工具栏。黑色、白色、蓝色调色板完全支持 Visual Studio 2019 主题!

最近更新

  1. TCP协议是安全的吗?

    2023-12-21 13:10:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-21 13:10:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-21 13:10:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-21 13:10:02       18 阅读

热门阅读

  1. 在spring boot项目引入mybatis plus后的的案例实践

    2023-12-21 13:10:02       44 阅读
  2. Rust中Result处理方式

    2023-12-21 13:10:02       33 阅读
  3. 力扣题目学习笔记(OC + Swift)16. 最接近的三数之和

    2023-12-21 13:10:02       41 阅读
  4. Python多任务编程-07多线程版udp聊天程序

    2023-12-21 13:10:02       27 阅读
  5. shell——变量之字符串的截取

    2023-12-21 13:10:02       33 阅读
  6. Vue的网络请求、插槽、Vuex

    2023-12-21 13:10:02       44 阅读
  7. git或svn提交消息时,fix、feat等命令的含义

    2023-12-21 13:10:02       41 阅读
  8. 爬虫scrapy管道的使用

    2023-12-21 13:10:02       34 阅读
  9. 面试经典150题(38-41)

    2023-12-21 13:10:02       33 阅读