当前位置: 首页 > news >正文

【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 

相关文章:

【Qt】按钮的属性相关API

目录 一. QPushButton 二. QRadioButton 按钮组 三. QCheckBox Qt中按钮的继承体系如下图 QAbstractButton是一个抽象类,集成了按钮的核心属性和API 按钮说明QPushButton(普通按钮)最常见的按钮,用于触发操作或者事件。可以设…...

blender和3dmax和maya和c4d比较

Blender、3ds Max、Maya和Cinema 4D (C4D)都是强大的3D建模和动画软件,但它们各有特点和适用领域。以下是它们的比较: Blender: 开源免费全面的功能,包括建模、动画、渲染、视频编辑等学习曲线较陡峭,但社区支持强大适合独立艺术家…...

visio保存一部分图/emf图片打开很模糊/emf插入到word或ppt中很模糊

本文主要解决三个问题 visio保存一部分图 需求描述:在一个visio文件中画了很多个图,但我只想把其中一部分保存成某种图片格式,比如jpg emf png之类的,以便做后续的处理。 方法:超级容易。 选中希望保存的这部分图&…...

沙尘传输模拟教程(基于wrf-chem)

沙尘传输模拟教程(基于wrf-chem) 文章目录 沙尘传输模拟教程(基于wrf-chem)简介实验目的wrf-chem简介 软件准备wps、wrf-chem安装conda安装ncl安装ncap安装 数据准备气象数据准备下垫面数据准备 WPS数据预处理namelist.wps的设置geogrid.exe下垫面处理ungrib.exe气象数据预处理…...

使用 Python 进行测试(8)纯净测试

原文:Testing with Python (part 8): purity test 总结 如果你要使用综合测试(integrated tests): def test_add_new_item_to_cart(product, cart):new_product Product.objects.create(nameNew Product, price15.00)new_cart…...

python的tkinter、socket库开发tcp的客户端和服务端

一、tcp通讯流程和开发步骤 1、tcp客户端和服务端通讯流程图 套接字是通讯的利器,连接时要经过三次握手建立连接,断开连接要经过四次挥手断开连接。 2、客户端开发流程 1)创建客户端套接字 2)和服务端器端套接字建立连接 3&#x…...

Python面试题:Python中的异步编程:详细讲解asyncio库的使用

Python 的异步编程是实现高效并发处理的一种方法,它使得程序能够在等待 I/O 操作时继续执行其他任务。在 Python 中,asyncio 库是实现异步编程的主要工具。asyncio 提供了一种机制来编写可以在单线程内并发执行的代码,适用于 I/O 密集型任务。…...

【信号频率估计】MVDR算法及MATLAB仿真

目录 一、MVDR算法1.1 简介1.2 原理1.3 特点1.3.1 优点1.3.2 缺点 二、算法应用实例2.1 信号的频率估计2.2 MATLAB仿真代码 三、参考文献 一、MVDR算法 1.1 简介 最小方差无失真响应(Mininum Variance Distortionless Response,MVDR)算法最…...

HarmonyOS NEXT零基础入门到实战-第二部分

HarmonyOS NEXT零基础入门到实战-第二部分 Swiper 轮播组件 Swiper是一个 容器 组件,当设置了多个子组件后,可以对这些 子组件 进行轮播显示。(文字、图片...) 1、Swiper基本语法 2、Swiper常见属性 3、Swiper样式自定义 4、案例&…...

《小程序02:云开发之增删改查》

一、前置操作 // 一定要用这个符号包含里面的${}才会生效 wx.showToast({title: 获取数据成功:${colorLista}, })1.1:初始化介绍 **1、获取数据库引用:**在开始使用数据库 API 进行增删改查操作之前,需要先获取数据库的引用 cons…...

SQL执行流程、SQL执行计划、SQL优化

select查询语句 select查询语句中join连接是如何工作的? 1、INNER JOIN 返回两个表中的匹配行。 2、LEFT JOIN 返回左表中的所有记录以及右表中的匹配记录。 3、RIGHT JOIN 返回右表中的所有记录以及左表中的匹配记录。 4、FULL OUTER JOIN 返回左侧或右侧表中有匹…...

【前端】JavaScript入门及实战41-45

文章目录 41 嵌套的for循环42 for循环嵌套练习(1)43 for循环嵌套练习(2)44 break和continue45 质数练习补充 41 嵌套的for循环 <!DOCTYPE html> <html> <head> <title></title> <meta charset "utf-8"> <script type"…...

更加深入Mysql-04-MySQL 多表查询与事务的操作

文章目录 多表查询内连接隐式内连接显示内连接 外连接左外连接右外连接 子查询 事务事务隔离级别 多表查询 有时我们不仅需要一个表的数据&#xff0c;数据可能关联到俩个表或者三个表&#xff0c;这时我们就要进行夺标查询了。 数据准备&#xff1a; 创建一个部门表并且插入…...

基于最新版的flutter pointycastle: ^3.9.1的AES加密

基于最新版的flutter pointycastle: ^3.9.1的AES加密 自己添加pointycastle: ^3.9.1库config.dartaes_encrypt.dart 自己添加pointycastle: ^3.9.1库 config.dart import dart:convert; import dart:typed_data;class Config {static String password 成都推理计算科技; // …...

K8S内存资源配置

在 Kubernetes (k8s) 中&#xff0c;资源请求和限制用于管理容器的 CPU 和内存资源。配置 CPU 和内存资源时&#xff0c;使用特定的单位来表示资源的数量。 CPU 资源配置 CPU 单位&#xff1a;Kubernetes 中的 CPU 资源以 “核” (cores) 为单位。1 CPU 核心等于 1 vCPU/Core…...

【多任务YOLO】 A-YOLOM: You Only Look at Once for Real-Time and Generic Multi-Task

You Only Look at Once for Real-Time and Generic Multi-Task 论文链接&#xff1a;http://arxiv.org/abs/2310.01641 代码链接&#xff1a;https://github.com/JiayuanWang-JW/YOLOv8-multi-task 一、摘要 高精度、轻量级和实时响应性是实现自动驾驶的三个基本要求。本研究…...

数学建模--灰色关联分析法

目录 简介 基本原理 应用场景 优缺点 优点&#xff1a; 缺点&#xff1a; 延伸 灰色关联分析法在水质评价中的具体应用案例是什么&#xff1f; 如何克服灰色关联分析法在主观性强时的数据处理和改进方法&#xff1f; 灰色关联分析法与其他系统分析方法&#xff08;如A…...

NetSuite Saved Search迁移工具

我们需要在系统间迁移Saved Search&#xff0c;但是采用Copy To Account或者Bundle时&#xff0c;会有一些Translation不能迁移&#xff0c;或者很多莫名其妙的Dependency&#xff0c;导致迁移失败。因此&#xff0c;我们想另辟蹊径&#xff0c;借助代码完成Saved Search的迁移…...

Java IO模型深入解析:BIO、NIO与AIO

Java IO模型深入解析&#xff1a;BIO、NIO与AIO 一. 前言 在Java编程中&#xff0c;IO&#xff08;Input/Output&#xff09;操作是不可或缺的一部分&#xff0c;它涉及到文件读写、网络通信等方面。Java提供了多种类和API来支持这些操作。本文将从IO的基础知识讲起&#xff…...

《从C/C++到Java入门指南》- 9.字符和字符串

字符和字符串 字符类型 Java 中一个字符保存一个Unicode字符&#xff0c;所以一个中文和一个英文字母都占用两个字节。 // 计算1 .. 100 public class Hello {public static void main(String[] args) {char a A;char b 中;System.out.println(a);System.out.println(b)…...

阿姆智创21.5寸工控电脑一体机,硬核性能解锁工业自动化,源头工厂ODM定位解决方案

在工业4.0的浪潮下&#xff0c;SMT产线的精密化运行、MES与ESOP系统的数字化落地、自动化设备的智能化联动&#xff0c;对工业控制终端的综合性能、系统适配性和场景贴合度提出了更高要求。阿姆智创21.5寸工控电脑一体机&#xff0c;以工业级硬核性能为基底&#xff0c;以多系统…...

自动驾驶轨迹预测新思路:VectorNet如何用矢量编码替代传统栅格化方法?

自动驾驶轨迹预测的矢量革命&#xff1a;VectorNet如何重构环境编码范式 在自动驾驶系统的决策闭环中&#xff0c;轨迹预测模块犹如驾驶员的预判能力&#xff0c;其准确性直接关系到行车安全与舒适性。传统基于卷积神经网络&#xff08;CNN&#xff09;的预测方法存在一个根本性…...

学生党必备:AutoDL服务器+Pycharm远程开发极简配置(含学生认证技巧)

学生党高效开发指南&#xff1a;AutoDLPycharm远程开发全攻略 1. 低成本深度学习开发环境搭建 作为一名深度学习爱好者&#xff0c;最头疼的莫过于硬件资源不足。显卡价格居高不下&#xff0c;笔记本跑个MNIST都卡顿&#xff0c;更别提训练复杂模型了。好在云服务器为我们提供了…...

MOVA开源:AI同步生成音视频的全新突破

MOVA开源&#xff1a;AI同步生成音视频的全新突破 【免费下载链接】MOVA-360p 项目地址: https://ai.gitcode.com/OpenMOSS/MOVA-360p 导语&#xff1a;MOVA-360p模型正式开源&#xff0c;标志着AI音视频生成领域告别"无声时代"&#xff0c;首次实现视频与音…...

拥抱 Kotlin Multiplatform (KMP):现代 Android 开发工程师的进阶之路与鸿蒙跨端实践

引言 移动应用生态正经历着深刻变革。用户期望在 Android、iOS 乃至新兴的鸿蒙 (HarmonyOS) 等不同平台上获得一致、流畅的体验。传统的原生开发模式(为每个平台单独开发)在实现这种一致性时,面临着开发效率低、维护成本高、代码复用率差等挑战。同时,Kotlin 语言凭借其简…...

【LeArm】从零玩转机械臂(一):开箱、配网与基础控制实战

1. LeArm机械臂开箱初体验 第一次拿到LeArm机械臂的包装箱时&#xff0c;明显能感受到厂家在包装上的用心。打开外层纸箱后&#xff0c;内部还有一层泡沫保护层&#xff0c;所有部件都被固定在定制泡沫槽位里&#xff0c;这种包装方式让我想起了高端电子产品的开箱体验。取出所…...

nli-distilroberta-base详细步骤:自定义sentence-pair输入格式与JSON Schema定义

nli-distilroberta-base详细步骤&#xff1a;自定义sentence-pair输入格式与JSON Schema定义 1. 项目概述 nli-distilroberta-base是基于DistilRoBERTa模型的自然语言推理(NLI)Web服务&#xff0c;专门用于分析句子对之间的逻辑关系。这个轻量级模型能够快速判断两个句子之间…...

Debian/Ubuntu 上 KVM 虚拟化环境搭建全攻略:从源码到实战

Debian/Ubuntu 上 KVM 虚拟化环境搭建全攻略&#xff1a;从源码到实战 在当今云计算和容器化技术蓬勃发展的时代&#xff0c;虚拟化技术依然是基础设施领域不可或缺的基石。KVM&#xff08;Kernel-based Virtual Machine&#xff09;作为Linux内核原生支持的虚拟化解决方案&…...

Triton内存管理完全解析:共享内存与缓存策略

Triton内存管理完全解析&#xff1a;共享内存与缓存策略 【免费下载链接】triton Development repository for the Triton language and compiler 项目地址: https://gitcode.com/GitHub_Trending/tri/triton Triton语言和编译器作为深度学习计算的关键基础设施&#xf…...

跨平台实战:Windows与macOS下OpenClaw对接nanobot的差异详解

跨平台实战&#xff1a;Windows与macOS下OpenClaw对接nanobot的差异详解 1. 为什么需要关注跨平台差异 上周我在团队内部推广OpenClaw时&#xff0c;遇到了一个典型问题&#xff1a;同样的nanobot对接流程&#xff0c;在Windows和macOS上执行时出现了完全不同的行为。这让我意…...