【Qt】按钮的属性相关API

目录

一. QPushButton

二. QRadioButton

按钮组

三. QCheckBox


Qt中按钮的继承体系如下图

QAbstractButton是一个抽象类,集成了按钮的核心属性和API

按钮说明
QPushButton(普通按钮)最常见的按钮,用于触发操作或者事件。可以设置文本、图标等属性,并且可以响应点击事件
QCheckBox(复选框)允许用户从多个选项中选择一个或多个选项。每个复选框都可以独立选择或取消选择
QRadioButton(单旋按钮)用于在一组选项中选择一个选项。
QToolButton(工具按钮)与QPushButton类似,但通常用于工具栏或者工具箱中,可以设置文本、图标等属性,也可以作为单选按钮或复选按钮使用

实际开发中,前三种按钮比较常使用,QToolButton的使用较少,其功能和QPushButton有较多重合 

一. QPushButton

因为四种按钮都继承自QAbstractButton,所以都可以使用其属性,其中和QPushButton相关性较大的属性如下:

属性说明
text按钮中的文本
icon按钮中的图标
iconSize按钮中图标的大小
shortCut按钮对应的快捷键
autoRepeat鼠标持续按下时,按钮是否会重复触发。true则会持续产生鼠标点击事件,false反之
autoRepeatDelay重复触发的延时时间。鼠标持续按下多久后,开始重复触发
autoRepeatInterval 重复触发的周期。鼠标持续按下后,两次鼠标触发事件的间隔时间

相关API 

Qt的API设计风格非常清晰,此处列出的属性都是可以获取设置的。

例如使用text()获取按钮文本;使用setText()设置按钮文本

示例:创建4个带图标的按钮控制目标按钮的上下左右移动,并且关联快捷键

(1). 通过Qt Designer添加按钮并设置其objectName

(2). 设置按钮图标  —— 使用qrc文件  参看博客  ..............................................................................

   qrc文件结构如图

(3). 设置图标     按钮的属性等都在Widget构造函数中设置

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//设置目标按钮的图标ui->pushButton_target->setIcon(QIcon(":/image/cat.png"));ui->pushButton_target->setIconSize(QSize(80, 80));//设置控制按钮的图标ui->pushButton_up->setIcon(QIcon(":/image/up.png"));ui->pushButton_up->setIconSize(QSize(50, 50));ui->pushButton_down->setIcon(QIcon(":/image/down.png"));ui->pushButton_down->setIconSize(QSize(50, 50));ui->pushButton_left->setIcon(QIcon(":/image/left.png"));ui->pushButton_left->setIconSize(QSize(50, 50));ui->pushButton_right->setIcon(QIcon(":/image/right.png"));ui->pushButton_right->setIconSize(QSize(50, 50));
}Widget::~Widget()
{delete ui;
}

 (4). 关联信号与槽函数

void Widget::on_pushButton_up_clicked()
{//获取目标按钮的位置QRect rect = ui->pushButton_target->geometry();//向上移动5个像素ui->pushButton_target->setGeometry(rect.x(), rect.y() - 5, rect.width(), rect.height());
}void Widget::on_pushButton_down_clicked()
{//获取目标按钮的位置QRect rect = ui->pushButton_target->geometry();//向下移动5个像素ui->pushButton_target->setGeometry(rect.x(), rect.y() + 5, rect.width(), rect.height());
}void Widget::on_pushButton_left_clicked()
{//获取目标按钮的位置QRect rect = ui->pushButton_target->geometry();//向左移动5个像素ui->pushButton_target->setGeometry(rect.x() - 5, rect.y(), rect.width(), rect.height());
}void Widget::on_pushButton_right_clicked()
{//获取目标按钮的位置QRect rect = ui->pushButton_target->geometry();//向右移动5个像素ui->pushButton_target->setGeometry(rect.x() + 5, rect.y(), rect.width(), rect.height());
}

(5). 设置快捷键

快捷键有两种设置方式:

1. 传参使用QKeySequence

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

直接通过字符串指明,复合快捷键也是直接指明,如"ctrl + w

2. 传参使用Qt内置的枚举类型

//另一种设置方法
//ui->pushButton_up->setShortcut(Qt::CTRL + Qt::Key_W);
ui->pushButton_up->setShortcut(Qt::Key_W);
ui->pushButton_up->setShortcut(Qt::Key_S);
ui->pushButton_up->setShortcut(Qt::Key_A);
ui->pushButton_up->setShortcut(Qt::Key_D);

复合快捷键也是直接指明,如Qt::CTRL + Qt::Key_W

6. 设置连点。

如果使用快捷键,持续按下快捷键,会有连点的效果,这是键盘自带的

autoRepeat属性是鼠标点击按钮的连点效果

//设置鼠标连点
ui->pushButton_up->setAutoRepeat(true);
ui->pushButton_down->setAutoRepeat(true);
ui->pushButton_left->setAutoRepeat(true);
ui->pushButton_right->setAutoRepeat(true);

二. QRadioButton

QRadioButton是单旋按钮,可以让我们在多个选项中选择一个,具有排他性

 核心属性

属性说明
checkable是否能被选中,true代表可以
checked是否已经被选中,checkable是checked的前提
autoExclusive

是否排他

选中一个按钮后是否会取消其他按钮的选中

QRadioButton默认排他,即autoExclusive为true

 相关API

API说明
setCheckAble(bool)设置是否可选。若设置为false,不可选,但点击依然可以触发点击事件
setEnabled(bool)继承自QWidget的API,设置控件是否可用
setChecked(bool)

设置按钮是否已经被选中,不会触发普通点击事件

QAbstractButton提供了5种信号

信号说明
clicked()普通点击事件,不带参数
clicked(bool)普通点击事件,参数为一个bool值,表示该按钮是否被选中
pressed()鼠标按下
released()鼠标松开
toggled(bool)bool值表示该按钮是否被选中,当该状态改变时,该事件触发

按钮组

因为单选按钮是排他的,但我们期望实现,每一组内部控制排他,但是组之间不排他。

默认当前界面的所有按钮都排他,再选中另一个都会取消前一个的选中状态。为此我们需要对按钮进行分组——QButtonGroup

QButtonGroup的创建需要添加到对象树中

添加按钮分组的函数为addButton()

    QButtonGroup *g1 = new QButtonGroup(this);g1->addButton(ui->radioButton);g1->addButton(ui->radioButton_2);g1->addButton(ui->radioButton_3);QButtonGroup *g2 = new QButtonGroup(this);g2->addButton(ui->radioButton_4);g2->addButton(ui->radioButton_5);g2->addButton(ui->radioButton_6);QButtonGroup *g3 = new QButtonGroup(this);g3->addButton(ui->radioButton_7);g3->addButton(ui->radioButton_8);g3->addButton(ui->radioButton_9);

 相同组的按钮排他,组之间无排他效果

三. QCheckBox

QCheckBox表示复选按钮,可以允许选中多个,没有排他性

QcheckBox有一个独有属性——tristate,用于实现“三态复选框” 

tristate属性表示复选框是三种状态还是两种状态,如果tristate为True,表示复选框有选中,未选中,和半选中三种状态;如果tristate为False,则表示复选框只有选中和未选中两种状态

相关API

API说明
setTriState(bool)设置复选框是否为三态复选框
setCheckState(Qt::CheckState)设置三态复选框的状态,具体设置见下表

三态复选框的三种状态

名称含义
Qt.Checked2组件被选中(默认)
Qt.PartiallyChecked1组件被半选中
Qt.Unchecked0组件未选中

注意:CheckState=1或2时,isChecked()的返回值都是True 

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

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

相关文章

习题2.21

(defn rever [a](defn item[l r](if ( nil (first l)) r(item (rest l) (cons (first l) r))))(item a nil)) 这段代码非常有助于理解什么是深度优先,什么是广度优先。 很久没有写习题的代码了,倒不是懒得做习题了,是私事多,状态…

【系统架构设计】数据库系统(三)

数据库系统(三) 数据库模式与范式数据库设计备份与恢复分布式数据库系统分布式数据库的概念特点分类目标 分布式数据库的架构分布式数据库系统与并行数据库系统 数据仓库数据挖掘NoSQL大数据 数据库模式与范式 数据库设计 备份与恢复 分布式数据库系统…

macbook pro大模型推理

安装与配置 参考github ollama 链接安装ollama。安装完成后,安装常用的模型,下载速度超快。 性能测试 在进行实际测试之前,我首先对模型进行了预处理,以确保其在 M3 Max 上能够高效运行。测试过程中,我主要关注了以下几个方面: 模型加载时间 加载大型模型通常需要较…

粘弹性和机械塑性等力学行为如何影响细胞行为?

组织和细胞外基质(ECM)是细胞生存和功能的关键组成部分,它们不仅提供细胞生长和迁移的结构支撑,还通过其力学特性影响着细胞的形态、功能和行为。组织和ECM并非简单的材料,它们展现出复杂且多样的力学行为,…

农场驿站平台小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,农场资讯管理,卖家管理,用户分享管理,分享类型管理,商品信息管理,商品分类管理,系统管理,订单管…

MATLAB学习日志DAY13

13.矩阵索引(1) 13.1 下标 上图! A 的行 i 和列 j 中的元素通过 A(i,j) 表示。 例如,A(4,2) 表示第四行和第二列中的数字。 在幻方矩阵中, A(4,2) 为 15。 A(1,4) A(2,4) A(3,4) A(4,4) 用来计算 A 第四列中的…

【PB案例学习笔记】-32制作一个简单记事本程序

大家好,我是晓凡。 写在前面 这是PB案例学习笔记系列文章的第32篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码…

JVM基本知识——运行空间

JVM(Java Virtual Machine)即Java虚拟机,是负责读取java字节码,并在实际的硬件环境中运行。 JVM可以分为三部分:类装载器(ClassLoader)子系统、内存空间、执行引擎 内存空间(运行时…

“狂飙”过后,大模型未来在何方?

2024年6月14日,第六届“北京智源大会”在中关村展示中心开幕。 开幕现场,智源研究院、OpenAI、百度、零一万物、百川智能、智谱AI、面壁智能等国内主流大模型公司CEO与CTO,人工智能顶尖学者和产业专家,在围绕人工智能关键技术路径…

【计算机网络】计算机网络的性能指标(上篇)

个人主页:【😊个人主页】 系列专栏:【❤️计算机网络】 文章目录 前言计算机网络的性能指标速率数据量速率的定义计算方法与测量影响因素优化方法 带宽带宽的定义影响因素计算方法优化方法 吞吐量定义测量与测试影响因素与带宽的区别提升方法…

数据结构(栈)

文章目录 一、概念与结构 栈:⼀种特殊的线性表,其只允许在固定的⼀端进⾏插⼊和删除元素操作。进⾏数据插⼊和删除操作的⼀端称为栈顶,另⼀端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压…

docker compose 容器 编排分组

遇到问题:执行docker compose up -d 后docker compose 创建的容器们 在desktop-docker 中都在docker下一堆 搜索想着能不能把这个docker名字改一下,但是都没有找到这样的一个方案; 最后发现,我执行docker compose up -d 命令所在…

7. LangChain4j如何使用统一api调用?

前言 当我们对接LangChain4j的时候,面对复杂的各种各样的大模型的api的对接,让很多开发者感到力不从心。在每个大模型的api都不一样的时候?该如何快捷的切换模型的使用呢? 这时,One-API应运而生,它以其简洁…

面向初学者和专家的 40 大机器学习问答(2024 年更新)

面向初学者和专家的 40 大机器学习问答(2024 年更新) 一、介绍 机器学习是人工智能的重要组成部分,目前是数据科学中最受欢迎的技能之一。如果你是一名数据科学家,你需要擅长 python、SQL 和机器学习——没有两种方法。作为 DataFest 2017 的一部分,我们组织了各种技能测…

windows ssh的登录,私钥权限太开放 WARNING: UNPROTECTED PRIVATE KEY FILE!

问题描述 ssh -i wang -D localhost:1080 wangsg.ks99.topBad permissions. Try removing permissions for user Permissions for xxx are too open. F:\pms\pms-gpg-key\ssh-key\wang>ssh -i wang -D localhost:1080 wangsg.ks99.top Bad permissions. Try removing perm…

flutter 充电气泡

前言: 之前一直看到 有手机充电的时候 有气泡从Type-C 的位置冒泡上来 慢慢上移, 然后和上面的圆圈 会和,感觉还是挺好看的。今天试了下用 Flutter 实现了一版本。大致效果如下,而且气泡 和 气泡直接还可以粘黏 实现原理&#xff…

【开发实战】QT5 + OpenCV4 开发环境配置应用演示

前言 作为深度学习算法工程师,必须要掌握应用开发技能吗?搞工程肯定是必须要会界面开发,QT就是一个很不错的选择。本文以QT5.15 OpenCV4.8 OpenVINO2023为例,搭建应用开发环境,演示深度学习模型的QT应用案例。 开发…

windows USB 设备驱动开发-开发Type C接口的驱动程序(三)

编写 USB Type C 端口控制器驱动程序 如果 USB Type-C 硬件实现 USB Type-C 或电源传送 (PD) 物理层,但未实现供电所需的状态机,则需要编写 USB Type-C 端口控制器驱动程序。 在 Windows 10 版本 1703 中,USB Type-C 体系结构已得到改进&am…

pytorch学习(十)优化函数

优化函数主要有,SGD, Adam,RMSProp这三种,并且有lr学习率,momentum动量,betas等参数需要设置。 通过这篇文章,可以学到pytorch中的优化函数的使用。 1.代码 代码参考《python深度学习-基于pytorch》&…

Java里的引用详解

1.体验方法引用 方法引用的出现原因 在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案:拿参数做操作 那么考虑一种情况:如果我们在Lambda中所指定的操作方案,已经有地方存在相同方案,那是否还有必要…