「Qt Widget中文示例指南」如何实现一个分组框
Qt是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写所有平台无差别运行更提供了几乎所有开发过程中需要用到的工具。如今Qt已被运用于超过70个行业、数千家企业支持数百万设备及应用。Group Box分组框示例展示了如何在Qt中使用不同类型的分组框。Group Box分组框是容器小部件可以在逻辑上和屏幕上将按钮组织成组它们管理用户和应用程序之间的交互因此您不必强制执行简单的约束。分组框通常用于将复选框和单选按钮组织到排他性组中。Group Boxes示例包含一个单一的Window类用于显示四个分组框一个独占的单选按钮组、一个非独占的复选框组、一个具有启用复选框的独占单选按钮组以及一个具有普通按钮的组框。Window类定义Window类是QWidget的一个子类用于显示多个分组框。类定义包含构造每个分组框的函数并用不同选择的按钮部件填充它class Window : public QWidget { Q_OBJECT public: 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(Radio button 2)); QRadioButton *radio3 new QRadioButton(tr(Radio 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(Exclusive Radio Buttons)); groupBox-setCheckable(true); groupBox-setChecked(false);分组框包含三个互斥的单选按钮和一个独立的复选框为了保持一致性必须始终选中一个单选按钮因此我们确保首先选中第一个按钮。QRadioButton *radio1 new QRadioButton(tr(Radio button 1)); QRadioButton *radio2 new QRadioButton(tr(Radio button 2)); QRadioButton *radio3 new QRadioButton(tr(Radio button 3)); radio1-setChecked(true); QCheckBox *checkBox new QCheckBox(tr(Independent 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(Checkbox 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(Popup Button)); QMenu *menu new QMenu(this); menu-addAction(tr(First Item)); menu-addAction(tr(Second Item)); menu-addAction(tr(Third Item)); menu-addAction(tr(Fourth 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; }

相关新闻

抢先看!界面控件DevExpress WPF 2024产品路线图预览(一)

抢先看!界面控件DevExpress WPF 2024产品路线图预览(一)

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 本文将介绍2024年Dev…

2026/10/15 9:50:30 阅读更多 →
REM-unit-polyfill性能优化:7个技巧提升旧浏览器CSS渲染速度

REM-unit-polyfill性能优化:7个技巧提升旧浏览器CSS渲染速度

REM-unit-polyfill性能优化:7个技巧提升旧浏览器CSS渲染速度 【免费下载链接】REM-unit-polyfill A polyfill to parse CSS links and rewrite pixel equivalents into head for non supporting browsers 项目地址: https://gitcode.com/gh_mirrors/re/REM-unit-…

2026/10/15 9:50:10 阅读更多 →
TMS320F2837xS USB与uPP寄存器级编程及DMA配置实战指南

TMS320F2837xS USB与uPP寄存器级编程及DMA配置实战指南

1. 项目概述与核心价值 在嵌入式系统开发,尤其是工业控制、高速数据采集这类对实时性和带宽要求极高的领域,直接操作微控制器(MCU)的外设寄存器是工程师必须掌握的硬核技能。这不仅仅是调用几个现成的驱动库函数那么简单&#xff…

2026/10/10 7:12:46 阅读更多 →

最新新闻

HyperFrames实战:用多帧堆叠提升夜景信噪比与动态范围

HyperFrames实战:用多帧堆叠提升夜景信噪比与动态范围

作为一个常年拍夜景、又不愿意每次都扛三脚架出门的人,我有一段时间被“高ISO噪点”和“单帧动态范围不够”这两件事反复折磨。后来干脆花几个周末写了一个命令行小工具,名字就叫 HyperFrames。它的思路特别朴素:既然单帧照片在短时间内只有那…

2026/10/15 9:49:45 阅读更多 →
设备树开发实战:从dts编译、内核加载到调试避坑

设备树开发实战:从dts编译、内核加载到调试避坑

简介:面向Linux内核与嵌入式开发学习者,讲解设备树(Device Tree)在启动时提供硬件平台信息、替代内核arch目录中板级细节代码的背景,并系统梳理dts语法与内核加载dtb的完整流程。资源为单个PDF,约293KB&…

2026/10/15 9:49:45 阅读更多 →
JavaScript运算符全解析:从基础到高阶应用

JavaScript运算符全解析:从基础到高阶应用

1. JavaScript运算符全景解析作为前端开发的基石,运算符在JavaScript中扮演着至关重要的角色。从简单的加减乘除到复杂的逻辑判断,运算符贯穿了我们每一行代码。但你是否真正理解各种运算符的细微差别?我在实际开发中见过太多由于运算符使用不…

2026/10/15 9:49:45 阅读更多 →
健康管理应用社交化转型与隐私平衡实践

健康管理应用社交化转型与隐私平衡实践

1. 健康管理类应用的进化之路记得2014年第一次使用某款计步APP时,它只是个简单的运动数据记录工具。如今打开同类应用,你会发现社区动态、好友排行榜、兴趣小组等功能占据了主要界面。这种从工具属性向社交场域的转变,正在重塑整个健康管理应…

2026/10/15 9:49:45 阅读更多 →
工具理性泛滥下的意义重构:东西方哲学与现代实践

工具理性泛滥下的意义重构:东西方哲学与现代实践

1. 意义缺失时代的核心困境当代社会正面临一个前所未有的悖论:工具和技术手段的丰富程度远超人类历史上任何时期,但意义的匮乏感却比任何时候都更加普遍。每天我们被海量信息包围,却很难说出哪些内容真正值得投入生命去追求。这种矛盾状态在学…

2026/10/15 9:49:45 阅读更多 →
频谱分析仪选型与核心参数解析:N9020B/N9030A对比指南

频谱分析仪选型与核心参数解析:N9020B/N9030A对比指南

1. 频谱分析仪基础认知与选型指南在射频测试测量领域,频谱分析仪就像工程师的"电子显微镜",能够将看不见的电磁信号转化为可视化的频谱图形。是德科技(Keysight)的N9020B、安捷伦(Agilent)N9020A…

2026/10/15 9:48:45 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →