【Qt常用控件】—— 按钮类控件

目录

1.1 Push Button

1.2 Radio Buttion

1.3 Check Box

 1.4 Tool Button

1.5 小结


1.1 Push Button

使⽤ QPushButton 表⽰⼀个按钮. 这也是当前我们最熟悉的⼀个控件了.
QPushButton 继承⾃ QAbstractButton . 这个类是⼀个抽象类. 是其他按钮的⽗类.

在 Qt Designer 中也能够看到这⾥的继承关系.

 QAbstractButton中 QPushButton 相关性较⼤的属性

1. QAbstractButton 作为 QWidget 的⼦类, 当然也继承了 QWidget 的属性. 上⾯介绍的 QWidget ⾥的各种属性⽤法, 对于 QAbstractButton 同样适⽤. 因此表格仅列出 QAbstractButton 独有的属性.
2. Qt 的 api 设计⻛格是⾮常清晰的. 此处列出的属性都是可以 获取 和 设置 的. 例如, 使
text() 获取按钮⽂本; 使⽤ setText() 设置⽂本.
  • 事实上, QPushButton 的核⼼功能都是 QAbstractButton 提供的. ⾃⾝提供的属性都⽐较简单.
  • 其中 default audoDefault 影响的是按下 enter 时⾃动点击哪个按钮的⾏为; flat 把按钮设置为扁平的样式. 这⾥我们暂时都不做过多关注.
代码⽰例: 带有图标的按钮
1) 创建 resource.qrc ⽂件, 并导入图片

2) 在界面上创建⼀个按钮

3) 修改 widget.cpp, 给按钮设置图标.
Widget::Widget(QWidget *parent)
     : QWidget(parent)
     , ui(new Ui::Widget)
{
     ui->setupUi(this);

     // 创建图标
     QIcon icon(":/doge.png");
     // 设置图标
     ui->pushButton->setIcon(icon);
     // 设置图标⼤⼩
     ui->pushButton->setIconSize(QSize(50, 50));
}
4) 执⾏程序, 观察效果


代码⽰例: 带有快捷键的按钮

1) 在界⾯中拖五个按钮.
  • 五个按钮的 objectName 分别为 pushButton_target , pushButton_up ,
  • pushButton_down , pushButton_left , pushButton_right
  • 五个按钮的初始位置随意, 其中 pushButton_target 尺⼨设置为 100 * 100, 其余按钮设为 50 *
  • 50. ⽂本内容均清空

2) 创建 resource.qrc , 并导入5 个图⽚.

3) 修改 widget.cpp, 设置图标资源和快捷键
  • 使⽤ setShortcut 给按钮设置快捷键. 参数是⼀个 QKeySequence 对象. 表⽰⼀个按键序列. ⽀ 持组合键 (ctrl + c 这种).
  • QKeySequence 的构造函数参数, 可以直接使⽤ "ctrl+c" 这样的按键名字符串表⽰, 也可以使⽤预定义好的常量 (形如 Qt::CTRL + Qt::Key_C ) 表示.
Widget::Widget(QWidget *parent)
     : QWidget(parent)
     , ui(new Ui::Widget)
{
     ui->setupUi(this);

     // 设置图标
    ui->pushButton_target->setIcon(QIcon(":/dog.png"));
    ui->pushButton_target->setIconSize(QSize(100, 100));
    ui->pushButton_up->setIcon(QIcon(":/caret-up.png"));
    ui->pushButton_down->setIcon(QIcon(":/caret-down.png"));
    ui->pushButton_left->setIcon(QIcon(":/caret-left.png"));
    ui->pushButton_right->setIcon(QIcon(":/caret-right.png"));

     // 设置快捷键
     ui->pushButton_up->setShortcut(QKeySequence("w"));
     ui->pushButton_down->setShortcut(QKeySequence("s"));
     ui->pushButton_left->setShortcut(QKeySequence("a"));
     ui->pushButton_right->setShortcut(QKeySequence("d"));

     // 设置快捷键也可以写作
     // ui->pushButton_up->setShortcut(QKeySequence(Qt::Key_W));
     // ui->pushButton_down->setShortcut(QKeySequence(Qt::Key_S));
     // ui->pushButton_left->setShortcut(QKeySequence(Qt::Key_A));
     // ui->pushButton_right->setShortcut(QKeySequence(Qt::Key_D));
}
4) 修改 widget.cpp, 设置四个⽅向键的 slot 函数.
void Widget::on_pushButton_up_clicked()
{
     const QRect& rect = ui->pushButton_target->geometry();
     ui->pushButton_target->setGeometry(rect.x(), rect.y() - 5, rect.width(),
    rect.height());

     qDebug() << "up";
 }
void Widget::on_pushButton_down_clicked()
{
     const QRect& rect = ui->pushButton_target->geometry();
     ui->pushButton_target->setGeometry(rect.x(), rect.y() + 5, rect.width(),
    rect.height());

     qDebug() << "down";
}

void Widget::on_pushButton_left_clicked()
{
     const QRect& rect = ui->pushButton_target->geometry();
     ui->pushButton_target->setGeometry(rect.x() - 5, rect.y(), rect.width(),
    rect.height());

     qDebug() << "left";
}

void Widget::on_pushButton_right_clicked()
{
     const QRect& rect = ui->pushButton_target->geometry();
     ui->pushButton_target->setGeometry(rect.x() + 5, rect.y(), rect.width(),
    rect.height());

     qDebug() << "right";
}
5) 运行程序, 此时点击按钮, 或者使用 wasd 均可让狗头移动.


1.2 Radio Buttion

QRadioButton 是单选按钮. 可以让我们在多个选项中选择⼀个

  1. 作为 QAbstractButton QWidget 的⼦类, 上⾯介绍的属性和⽤法, 对于 QRadioButton同样适⽤.

QAbstractButton 中和 QRadioButton 关系较⼤的属性

代码⽰例: 选择性别 

1) 在界⾯上创建⼀个 label, 和 3 个 单选按钮
  • 设置的⽂本如下图. 3 个单选按钮的 objectName 分别为 radioButton_male, radioButton_female , radioButton_other

2) 修改 widget.cpp, 编辑三个 QRadioButton 的 slot 函数 

void Widget::on_radioButton_male_clicked()
{
     ui->label->setText("你选择的性别为: 男");
}

void Widget::on_radioButton_female_clicked()
{
     ui->label->setText("你选择的性别为: ⼥");
}

void Widget::on_radioButton_other_clicked()
{
     ui->label->setText("你选择的性别为: 其他");
}
3) 运⾏程序, 可以看到随着选择不同的单选按钮, label 中的提⽰⽂字就会随之变化.

4) 当前代码中, 如果程序启动, 则不会选择任何选项.  

  • 可以修改代码, 让程序启动默认选中性别男
Widget::Widget(QWidget *parent)
     : QWidget(parent)
     , ui(new Ui::Widget)
{
     ui->setupUi(this);

     // 设置默认选中该按钮
     ui->radioButton_male->setChecked(true);
     ui->label->setText("你选择的性别为: 男");
}
  • 此时运⾏程序, 即可看到 性别男 已经被选中了
5) 当前代码中, 也可以禁⽤ "其他" 被选中.
  • 修改 widget.cpp 的构造函数
// 禁⽤ other 选项
ui->radioButton_other->setCheckable(false);
  • 运⾏程序, 可以看到, 点击 "其他" 按钮的时候, 虽然不会被选中, 但是可以触发点击事件, 使上⾯的 label 显⽰性别为其他.

使⽤ setEnabled 是更彻底的禁⽤按钮的⽅式. 此时该按钮⽆法被选中, 也⽆法响应任何输⼊  

// 禁⽤ other 选项
ui->radioButton_other->setEnabled(false);


1.3 Check Box

QCheckBox 表⽰复选按钮. 可以允许选中多个.
  • QCheckBox 最相关的属性也是 checkable checked , 都是继承⾃QAbstractButton .
  • ⾄于 QCheckBox 独有的属性 tristate ⽤来实现 "三态复选框" . 这个东西⽐较冷⻔, 咱们不 做讨论

代码⽰例: 获取复选按钮的取值

1) 在界⾯上创建 三个复选按钮, 和⼀个普通按钮.
  • objectName 分别为 checkBox_eat , checkBox_sleep , checkBox_play , 以及pushButton

2) 给 pushButton 添加 slot 函数  

void Widget::on_pushButton_clicked()
{
     QString result;
     if (ui->checkBox_eat->isChecked()) {
         result += ui->checkBox_eat->text();
     }
     if (ui->checkBox_sleep->isChecked()) {
         result += ui->checkBox_sleep->text();
     }
     if (ui->checkBox_play->isChecked()) {
         result += ui->checkBox_play->text();
     }
     qDebug() << "选中的内容: " << result;
}
3) 运⾏程序, 可以看到点击确认按钮时, 就会在控制台中输出选中的内容.


 1.4 Tool Button

QToolButton 的⼤部分功能, 和 QPushButton 是⼀致的. 但是 QToolButton 主要应⽤在⼯具栏, 菜单等场景. 这个我们暂时先不介绍.

1.5 小结

按钮类控件在用户界面开发中扮演着重要的角色,主要用于触发特定的操作或事件。以下是关于按钮类控件的小结:

  1. QPushButton

    • 用途:常用的按钮控件,用于触发各种操作。
    • 特点:可以显示文本和图标,支持样式表定制,发出 clicked() 信号响应用户点击。
  2. QToolButton

    • 用途:工具按钮控件,通常用于工具栏、菜单栏等。
    • 特点:支持文本和图标显示,可以设置弹出菜单或下拉菜单,可以作为常规按钮或复选按钮使用。
  3. QRadioButton

    • 用途:单选按钮控件,用于在一组选项中选择一个。
    • 特点:显示一个圆形按钮,可以与其他单选按钮分组,只能选择其中的一个。
  4. QCheckBox

    • 用途:复选框控件,用于允许用户选择一个或多个选项。
    • 特点:显示一个方形按钮,可以选中或取消选中,支持与其他复选框独立使用。
  5. QAbstractButton(抽象按钮类):

    • 用途:按钮类控件的抽象基类,不直接使用,而是作为其他按钮类的基类。
    • 特点:定义了按钮类的通用行为和接口,如按下状态、点击信号等。

这些按钮类控件都提供了丰富的功能和灵活的定制选项,开发者可以根据实际需求选择合适的按钮类型来构建用户界面。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目体检(Health Check)升级上线

在快节奏的现代商业环境中&#xff0c;项目的健康与否直接关系到其最终的成功与否。为了满足这一需求&#xff0c;我们精心打造了项目体检工具&#xff08;Health Check&#xff09;。它不仅仅是一个工具&#xff0c;更是一种对项目健康状况的全面把控和智能诊断。 项目体检工具…

F-logic DataCube3 SQL注入漏洞复现(CVE-2024-31750)

0x01 产品简介 F-logic DataCube3是一款用于光伏发电系统的紧凑型终端测量系统。 0x02 漏洞概述 F-logic DataCube3 /admin/pr_monitor/getting_index_data.php 接口处存在SQL注入漏洞,未经身份验证的攻击者可通过该漏洞获取数据库敏感信息,深入利用可控制整个web服务器。 …

外显子测序wes

外显子是基因组中能够转录组出成熟RNA的部分。一个基因组中所有外显子的集合&#xff0c;即为外显子组。值得注意的是&#xff0c;通常所说的全外显子组测序&#xff0c;是指针对蛋白编码基因的外显子&#xff0c;很少涉及非编码基因。 基因(gene)是DNA中含有特定遗传信息的一…

MapReduce——ReudceTask并行度决定机制

MapReduce——ReudceTask并行度决定机制 1. Reduce任务的数量&#xff08;reduce task count&#xff09;&#xff1a; 这是最基本的决定因素之一。在作业启动时&#xff0c;用户可以指定Reduce任务的数量。更多的Reduce任务意味着更多的并行度&#xff0c;因为每个Reduce任务…

BeautifulSoup模块

【一】Beautifulsoup4初始 【前言】bs4模块 安装pip install beautifulsoup4 【1】什么是beautifulsoup: ​ 是一个可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。(官方) ​ beautifulsoup是一个解析器,…

贪吃蛇的简单实现(c语言)

前言&#xff1a;学完了C语言的基础语法&#xff0c;和一点数据结构的知识&#xff0c;拿贪吃蛇来练练手&#xff0c;并熟悉以前的知识。写完之后&#xff0c;有一种成就感&#xff0c;为以后的学习饱满激情。 注意这里的讲解是由部分到整体的思路。 目录 控制台不能是终端&am…

java可盈保险合同管理系统的设计与实现(springboot+mysql源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的可盈保险合同管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于Spring Boot的…

麒麟服务器操作系统自动化安装应答文件制作

原文链接&#xff1a;麒麟服务器操作系统自动化安装应答文件制作 Hello&#xff0c;大家好啊&#xff01;今天我们将探讨如何为麒麟服务器操作系统制作自动化安装应答文件。在部署大量服务器时&#xff0c;自动化安装是提高效率和确保安装一致性的关键技术。通过使用应答文件&a…

IEC104协议

1. 简介 IEC104规约是一个广泛应用于电力、城市轨道交通等行业的国际标准。 2. 术语解释 遥脉 (电度量)&#xff1a; 是指对现场某装置所发出的脉冲信号进行周期累计的一种远程计数操作。 其实&#xff0c;遥脉也可以看成是被具体规定了采用脉冲计数作为测量方法的一种遥测…

JumpServer搭建堡垒机实战

文章目录 第一步、下载安装第二步、访问异常处理【1】docker方式拉取失败 JumpServer是运维人员可连接内部服务器上进行操作&#xff0c;支持Linux等操作系统的管理工具。 第一步、下载安装 curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/…

基于函数计算FC3.0 部署AI数字绘画stable-diffusion自定义模型

基于函数计算FC3.0 部署AI数字绘画stable-diffusion自定义模型 部署AI数字绘画stable-diffusion曲线救国授权github账号 部署ffmpeg-app-v3总结 在讲述了函数计算FC3.0和函数计算FC2.0的操作界面UI改版以及在函数管理、函数执行引擎、自定义域名、函数授权及弹性伸缩规则方面进…

精灵传信系统/支持对接易支付/网站+小程序双端php源码下载

简介 精灵传信支持在线提交发送短信&#xff0c;查看回复短信&#xff0c;在线购买额度&#xff0c;自定义对接易支付&#xff0c;设置违禁词&#xff0c;支持网站小程序双端。&#xff08;文末下载&#xff09; 演示截图 在数字化浪潮的推动下&#xff0c;技术创新正以前所未…

maven安装和配置

1.下载版本选择 如果使用的是idea的话&#xff0c;需要考虑跟maven的适配问题&#xff0c;从博文maven 与 idea版本不适配问题的思考 得出以下结论&#xff1a; 1.idea 2021兼容maven 3.8.1及以前的所有版本。 2.idea 2020兼容maven 3.6.3及以前的所有版本。 4.idea 2019兼容m…

深度学习基础——循环神经网络的结构及参数更新方式

深度学习基础——循环神经网络的结构及参数更新方式 深度学习领域的一大重要分支是循环神经网络&#xff08;Recurrent Neural Networks&#xff0c;简称RNN&#xff09;&#xff0c;它是一种用于处理序列数据的神经网络结构。与传统的前馈神经网络不同&#xff0c;循环神经网…

江苏瑞达环保科技股份有限公司| 邀您参加2024全国水科技大会暨技术装备成果展览会

—— 展位号:A18 —— 江苏瑞达环保科技股份有限公司是一家致力于环境保护和可持续发展的高新技术企业&#xff0c;专注于环境治理技术研发和环保节能装备制造,为工业企业提供可靠的工程解决方案。2023年&#xff0c;瑞达科技被认定为江苏省省级专精特新企业。 瑞达科技成立于2…

使用【node】创建本地接口

在前端开发的过程中&#xff0c;接口相关的信息一般是由后端处理好返回给前端&#xff0c;但是有时候后端不在的时候想自己写个接口进行测试是非常麻烦的。 node是前端一个不错的写接口工具 一 初始化文件 1 在新建一个空的文件夹node 进入空文件夹在&#xff0c;文件夹的地…

文献速递:深度学习胶质瘤诊断---结合分子亚型分析、分级与胶质瘤的多任务深度学习分割

Title 题目 Combined molecular subtyping, grading, and segmentation of glioma using multi-task deep learning 结合分子亚型分析、分级与胶质瘤的多任务深度学习分割 Abstract 摘要 Accurate characterization of glioma is crucial for clinical decision making. A…

vue项目中基于fabric 插件实现涂鸦画布功能

vue项目中基于fabric 插件实现涂鸦画布功能 一、效果图二、安装依赖三、main.js引入四、主要代码 一、效果图 二、安装依赖 npm install fabric 三、main.js引入 import fabric from fabric Vue.use(fabric);四、主要代码 //封装成了一个组件 <template><el-dialogt…

图片/视频上传(超简单教程)

#应用场景# 该后端开发接口适用 图片/视频上传&#xff0c;返回路径名称场景 1.视频上传 写在Controller层 这里只是一个接收&#xff0c;调用uploadObject方法上传oss public OmsResult<FileUploadDto> goodsUploadVideo(RequestParam(value "file") Mu…

【力扣 Hot100 | 第七天】4.22(找到字符串中所有字母异位词)

文章目录 2.找到字符串中所有字母异位词2.1题目2.2解法&#xff1a;滑动窗口2.2.1解题思路2.2.2代码实现 2.找到字符串中所有字母异位词 2.1题目 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺…