「Qt Widget中文示例指南」如何实现一个分组框

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

Group Box(分组框)示例展示了如何在Qt中使用不同类型的分组框。Group Box(分组框)是容器小部件,可以在逻辑上和屏幕上将按钮组织成组,它们管理用户和应用程序之间的交互,因此您不必强制执行简单的约束。

分组框通常用于将复选框和单选按钮组织到排他性组中。

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

「Qt Widget中文示例指南」如何实现一个分组框

Group Boxes示例包含一个单一的Window类,用于显示四个分组框:一个独占的单选按钮组、一个非独占的复选框组、一个具有启用复选框的独占单选按钮组,以及一个具有普通按钮的组框。

Window类定义

Window类是QWidget的一个子类,用于显示多个分组框。类定义包含构造每个分组框的函数,并用不同选择的按钮部件填充它:

class Window : public QWidget
{
Q_OBJECTpublic:
Window(QWidget *parent = nullptr);private:
QGroupBox *createFirstExclusiveGroup();
QGroupBox *createSecondExclusiveGroup();
QGroupBox *createNonExclusiveGroup();
QGroupBox *createPushButtonGroup();
};

在本示例中,小部件将用作顶级窗口,因此定义了构造函数,这样我们就不必指定父小部件。

Window类实现

构造函数创建了一个网格布局,并用要显示的每个分组框填充它:

Window::Window(QWidget *parent)
: QWidget(parent)
{
QGridLayout *grid = new QGridLayout;
grid->addWidget(createFirstExclusiveGroup(), 0, 0);
grid->addWidget(createSecondExclusiveGroup(), 1, 0);
grid->addWidget(createNonExclusiveGroup(), 0, 1);
grid->addWidget(createPushButtonGroup(), 1, 1);
setLayout(grid);setWindowTitle(tr("Group Boxes"));
resize(480, 320);
}

用于创建每个分组框的函数都返回一个要插入到网格布局中的QGroupBox。

QGroupBox *Window::createFirstExclusiveGroup()
{
QGroupBox *groupBox = new QGroupBox(tr("Exclusive Radio Buttons"));QRadioButton *radio1 = new QRadioButton(tr("&Radio button 1"));
QRadioButton *radio2 = new QRadioButton(tr("R&adio button 2"));
QRadioButton *radio3 = new QRadioButton(tr("Ra&dio button 3"));radio1->setChecked(true);

第一个分组框包含并管理三个单选按钮,由于分组框只包含单选按钮,因此默认情况下它是排他性的,因此在任何给定时间只能选中一个单选按钮。我们检查第一个单选按钮,以确保按钮组包含一个已检查的按钮。

QVBoxLayout *vbox = new QVBoxLayout;
vbox->addWidget(radio1);
vbox->addWidget(radio2);
vbox->addWidget(radio3);
vbox->addStretch(1);
groupBox->setLayout(vbox);return groupBox;
}

我们在分组框中使用垂直布局,以垂直列表的形式显示按钮,并将分组框返回给构造函数。

第二个分组框本身是可检查的,提供了一种方便的方法来禁用其中的所有按钮。最初它是未选中的,因此必须先选中分组框本身,然后才能选中其中的任何单选按钮。

QGroupBox *Window::createSecondExclusiveGroup()
{
QGroupBox *groupBox = new QGroupBox(tr("E&xclusive Radio Buttons"));
groupBox->setCheckable(true);
groupBox->setChecked(false);

分组框包含三个互斥的单选按钮和一个独立的复选框,为了保持一致性,必须始终选中一个单选按钮,因此我们确保首先选中第一个按钮。

QRadioButton *radio1 = new QRadioButton(tr("Rad&io button 1"));
QRadioButton *radio2 = new QRadioButton(tr("Radi&o button 2"));
QRadioButton *radio3 = new QRadioButton(tr("Radio &button 3"));
radio1->setChecked(true);
QCheckBox *checkBox = new QCheckBox(tr("Ind&ependent checkbox"));
checkBox->setChecked(true);

按钮的排列方式与第一个分组框中的按钮相同。

QVBoxLayout *vbox = new QVBoxLayout;
vbox->addWidget(radio1);
vbox->addWidget(radio2);
vbox->addWidget(radio3);
vbox->addWidget(checkBox);
vbox->addStretch(1);
groupBox->setLayout(vbox);return groupBox;
}

第三个分组框使用“平面”样式构造,更适合某些类型的对话框。

QGroupBox *Window::createNonExclusiveGroup()
{
QGroupBox *groupBox = new QGroupBox(tr("Non-Exclusive Checkboxes"));
groupBox->setFlat(true);

此分组框仅包含复选框,因此默认情况下它是非排他性的,这意味着每个复选框都可以独立于其他复选框进行选中。

QCheckBox *checkBox1 = new QCheckBox(tr("&Checkbox 1"));
QCheckBox *checkBox2 = new QCheckBox(tr("C&heckbox 2"));
checkBox2->setChecked(true);
QCheckBox *tristateBox = new QCheckBox(tr("Tri-&state button"));
tristateBox->setTristate(true);

同样,我们在分组框中使用垂直布局,以垂直列表的形式显示按钮。

QVBoxLayout *vbox = new QVBoxLayout;
vbox->addWidget(checkBox1);
vbox->addWidget(checkBox2);
vbox->addWidget(tristateBox);
vbox->addStretch(1);
groupBox->setLayout(vbox);return groupBox;
}

最后一个分组框只包含按钮,并且与第二个分组框一样,它是可检查的。

QGroupBox *Window::createPushButtonGroup()
{
QGroupBox *groupBox = new QGroupBox(tr("&Push Buttons"));
groupBox->setCheckable(true);
groupBox->setChecked(true);

我们创建了一个普通按钮、一个切换按钮和一个平面按钮:

QPushButton *pushButton = new QPushButton(tr("&Normal Button"));
QPushButton *toggleButton = new QPushButton(tr("&Toggle Button"));
toggleButton->setCheckable(true);
toggleButton->setChecked(true);
QPushButton *flatButton = new QPushButton(tr("&Flat Button"));
flatButton->setFlat(true);

Push按钮可以用来显示弹出式菜单,我们创建一个,并附加一个简单的菜单:

QPushButton *popupButton = new QPushButton(tr("Pop&up Button"));
QMenu *menu = new QMenu(this);
menu->addAction(tr("&First Item"));
menu->addAction(tr("&Second Item"));
menu->addAction(tr("&Third Item"));
menu->addAction(tr("F&ourth Item"));
popupButton->setMenu(menu);

最后,我们垂直布局小部件,并返回创建的分组框:

QVBoxLayout *vbox = new QVBoxLayout;
vbox->addWidget(pushButton);
vbox->addWidget(toggleButton);
vbox->addWidget(flatButton);
vbox->addWidget(popupButton);
vbox->addStretch(1);
groupBox->setLayout(vbox);return groupBox;
}
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 主题!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/600369.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

备战蓝桥杯Day37 - 真题 - 特殊日期

一、题目描述 思路: 1、统计2000年到2000000年的日期,肯定是需要遍历 2、闰年的2月是29天,非闰年的2月是28天。我们需要判断这一年是否是闰年。 1、3、5、7、8、10、12月是31天,4、6、9、11月是30天。 3、年份yy是月份mm的倍数…

交易要想成功澳福总结几点

100%使用基本面分析的投资者能保证每次交易都能成功吗?100%使用技术分析的投资者能保证每次交易都能成功吗?在fpmarkets澳福看来无论是基本面分析还是技术分析都不能保证100%交易成功。 投资者不能只依赖一种分析进行投资交易。在fpmarkets澳福看来成功的…

Hyper-v平台搭建pve系统之网络配置(双网卡、内外网分离)

现在我需要在我本地配置的PVE系统上配置双网卡,然后一个连接外部网络(访问互联网),一个连接内部网络(只能和宿主机之间互相访问) 最终效果: 登录PVE平台,我可以正常访问外网&#…

获取淘宝销量API商品详情页原数据APP接口:测试key获取(含测试链接)

淘宝/天猫获得淘宝app商品详情原数据 API 返回值说明 item_get_app-获得淘宝app商品详情原数据 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地…

替换空格(替换特定字符)

😀前言 在字符串处理中,经常会遇到需要替换特定字符的情况。本文将介绍一道经典的字符串替换问题:将字符串中的空格替换成 “%20”。我们将探讨一种高效的解决方法,通过倒序遍历字符串来实现原地替换,避免额外空间的开…

python(使用循环显示四种模式)

代码: # 模式A for i in range(1, 6):for j in range(1, 6):if i j:print(i, end"")else:print(" ", end"")print()# 模式B for i in range(1, 6):for j in range(1, 6):if i j 7:print(j, end"")else:print(" &q…

C++ 构建太慢的 5 个信号

从我的个人经验来看,我们每天庸庸碌碌,忙于处理各种各样的任务,但却并一定不了解这些处理方式背后的真实原因。与之相应地,我们自然也都不清楚每个决定背后的原因。在工作和个人生活上,大都如此。大家遵循着一种特定的…

【Spring Security】2.实现最简单的身份验证

文章目录 一、找到官网的身份认证(authentication)示例代码二、实现最简单的身份验证1、创建Spring Boot项目2、创建IndexController3、创建index.html4、启动项目测试Controller 三、{/logout}的作用四、页面样式无法加载的问题 一、找到官网的身份认证…

MyBatis 入门使用(二)

MyBatis的开发有两种方式:注解和XML,上一期我们学习了使用注解的方式,这期我们学习XML的方式。 使用注解主要是用来完成一些简单的增删改查功能,如果需要实现复杂的SQL功能,建议使用XML来配置映射语句。 1. 使用步骤…

性能优化 - 你能说一说,为什么做了骨架屏,FCP的指标还是没有提升吗

难度级别:中高级及以上 提问概率:80% FCP的全程是First Contentful Paint,是衡量网页性能的一个重要指标,很多人把FCP理解为元素内容首次渲染到浏览器上的时间。但由于现在比较流行的Vue或是React项目中,HTML文档最初只有一个id为app的DIV…

篮球竞赛|基于Springboot的篮球竞赛预约平台系统设计与实现(源码+数据库+文档)

篮球竞赛预约平台目录 基于Springboot的篮球竞赛预约平台系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、前台: 2、后台 管理员功能 用户功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff…

武汉星起航深入分析市场动态,赢得跨境市场的高度认可

随着全球跨境电商的蓬勃发展,武汉星起航以其独到的市场洞察和深度合作模式在行业中崭露头角。公司凭借对市场趋势、消费者需求和竞争格局的敏锐洞察而声名鹊起,不仅成功跟随市场脉搏,更在竞争激烈的跨境电商领域中脱颖而出。 武汉星起航在制…