Qt 按钮类控件(Push Button 与 Radio Button)(1)

news2025/6/10 7:12:12

文章目录

  • Push Button
    • 前提概要
    • API接口
    • 给按钮添加图标
    • 给按钮添加快捷键
  • Radio Button
    • API接口
    • 性别选择

Push Button(鼠标点击不放连续移动+快捷键)

请添加图片描述

Radio Button

请添加图片描述

Push Button

前提概要

1. 之前文章中所提到的各种跟QWidget有关的各种属性/函数/方法,针对接下来要介绍的Qt的各种控件都是有效的

2. 使用QPushButton表示一个按钮,它继承自QAbstractButton,这个类是一个抽象类,是其它按钮的父类。下面是继承关系图

在这里插入图片描述
3. 抽象类,这个类包含了纯虚函数,无非创建出实例对象。创建子类必须要重写上述的纯虚函数,才能创建出子类的实例(否则子类仍然也是一个纯虚函数)

API接口

属性说明
text按钮中的文本
icon按钮中的图标
iconSize按钮中图标的尺寸
shortCut按钮对应的快捷键
autoRepeat按钮是否会重复触发。当鼠标左键按住不放时,
如果设为 true, 则会持续产生鼠标点击事件;
如果设为 false, 则必须释放鼠标, 再次按下鼠标时才能产生点击事件。
(相当于游戏手柄上的“连发”效果)
autoRepeatDelay重复触发的延时时间。按住按钮多久之后, 开始重复触发。
autoRepeatInterval重复触发的周期。

给按钮添加图标

1.先要考虑如何导入图片,在后续编写代码,如果用到一些图片等外部资源,都会优先考虑qrc机制,除非这个资源太大了。qrc机制可以参考这篇文章:Qt window frame + windowTitle + windowIcon属性(3)

在这里插入图片描述

2.如果你在Qt Creator中创建好qrc文件后,切换到代码编辑框编写代码,如果再想切回到刚才的qrc编辑器,此时点击左侧的qrc文件很可能是无效的,这算是Qt Creator的一个bug
在这里插入图片描述

3.编写代码 + 图形化拖拽Push Button

在这里插入图片描述

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 创建一个图标对象
    QIcon icon(":/push_Button_icon.jpg");
    // 设置图标
    ui->pushButton->setIcon(icon);
    // 调整图标的显示大小
    ui->pushButton->setIconSize(QSize(50, 50));
}

Widget::~Widget()
{
    delete ui;
}

4.效果展示

在这里插入图片描述

给按钮添加快捷键

1.之前写过一个例子,通过四个按钮来控制target按钮的移动,之前这个移动是通过鼠标点击按钮来实现的。那此时就可以引入快捷键,通过快捷键来模拟鼠标的点击,这里按钮就直接通过图片来表示了。下面还要有个target按钮的图标
在这里插入图片描述
2.创建qrc文件,导入资源。把图片导入项目的时候,由于图片变多了,不想再继续放到项目根目录下,就创建了image目录,把图片放到image目录中,此时意味着后续访问这些图片,就需要再路径中带上image这一级目录名字

在这里插入图片描述

3.编辑ui文件,创建图形化界面。这里可以通过点阵把这些按钮对齐,不过后面还会介绍更好的方式来完成这里的对齐操作。在右上角处(Qt 程序运行过程中,对象树的模样)可以更直观的看到对象结构,以及每个对象的objectName

在这里插入图片描述

4.编写构造函数,完成初始化操作

在这里插入图片描述

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 创建图标去初始化每个按钮
    ui->pushButton_target->setIcon(QIcon(":/image/target.jpg"));
    ui->pushButton_target->setIconSize(QSize(120, 120));

    // 初始化向上按钮
    ui->pushButton_up->setIcon(QIcon(":/image/up.png"));
    ui->pushButton_up->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));

    // 初始化向下按钮
    ui->pushButton_down->setIcon(QIcon(":/image/down.png"));
    ui->pushButton_down->setIconSize(QSize(50, 50));
}

5.实现方向键的槽函数(转到槽定义),复制粘贴也特别细心一点,这里复制粘贴完了之后要进行代码的微调(坐标计算),通过鼠标点击去移动target按钮

在这里插入图片描述

void Widget::on_pushButton_up_clicked()
{
    // 获取到目前target的位置
    QRect rect = ui->pushButton_target->geometry();
    // 基于目前的位置,去设置新的位置
    ui->pushButton_target->setGeometry(rect.x(), rect.y() - 5, rect.width(), rect.height());
}
void Widget::on_pushButton_down_clicked()
{
    // 获取到目前target的位置
    QRect rect = ui->pushButton_target->geometry();
    // 基于目前的位置,去设置新的位置
    ui->pushButton_target->setGeometry(rect.x(), rect.y() + 5, rect.width(), rect.height());
}
void Widget::on_pushButton_right_clicked()
{
    // 获取到目前target的位置
    QRect rect = ui->pushButton_target->geometry();
    // 基于目前的位置,去设置新的位置
    ui->pushButton_target->setGeometry(rect.x() + 5, rect.y(), rect.width(), rect.height());
}
void Widget::on_pushButton_left_clicked()
{
    // 获取到目前target的位置
    QRect rect = ui->pushButton_target->geometry();
    // 基于目前的位置,去设置新的位置
    ui->pushButton_target->setGeometry(rect.x() - 5, rect.y(), rect.width(), rect.height());
}

6.设置快捷键(关键要点),也是需要在Widget的构造函数中完成,程序一启动,快捷键就是有效的

在这里插入图片描述

  • 这里是直接通过按键的名字去设置,虽然简单但挺容易写错的(写错了并不会报错)。其次按下的快捷键不一定是单个按键,有可能是组合键(QKeySequence("ctrl+w")参数中不要带空格)
// 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"));
  • 还可以通过按键的枚举来设置按键的快捷键,组合快捷键的写法:QKeySequence(Qt::CTRL + Qt::Key_W)。按ctrl加鼠标点击Key_W可进入查看
// ui->pushButton_up->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_W));
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));

7.这里键盘快捷键默认就是能连发的,但是鼠标点击按钮则不行(打枪游戏中的点射和连续射击),这里要用到setAutoRepeat(true)接口,在Widget的构造函数中

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

8.动图演示

请添加图片描述

Radio Button

QRadioButton是单选按钮,可以让我们在多个选项中选择一个。同样适用上面介绍的属性和用法

API接口

属性说明
checkable是否能选中
checked是否已经被选中,checkable 是 checked 的前提条件
autoExclusive是否排他。选中一个按钮之后是否会取消其他按钮的选中。对于 QRadioButton 来说默认就是排他的

性别选择

1.在界面上提供三个可选择项:男,女,其它

在这里插入图片描述

2.先要提供一个默认选项

在这里插入图片描述

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    
    // 先添加一个默认选项
    ui->radioButton_male->setChecked(true);
    ui->label->setText("你选择的性别为:男");
}

3.三个按钮转到槽定义槽函数

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("你选择的性别为:其它");
}

4.选了性别男或女后,那就不能去勾选其它选项了,ui->radioButton_other->setCheckable(false);checkable它只是能让按钮不被选中,仍然是可以响应点击事件的

在这里插入图片描述

5.直接禁用掉其它选项,这里也能看出来,对于QRadioButton按钮默认就是排他的,只能选中其中一个

在这里插入图片描述

6.widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 先添加一个默认选项
    ui->radioButton_male->setChecked(true);
    ui->label->setText("你选择的性别为:男");
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_radioButton_male_clicked()
{
    // 将界面上的内容进行更新
    ui->label->setText("你选择的性别为:男");
    // ui->radioButton_other->setCheckable(false);
    // 那这里基本上就之只能将其给禁用掉
    // ui->radioButton_other->setEnabled(false);
    ui->radioButton_other->setDisabled(true);
}

void Widget::on_radioButton_female_clicked()
{
    // 将界面上的内容进行更新
    ui->label->setText("你选择的性别为:女");
    // ui->radioButton_other->setCheckable(false);
    ui->radioButton_other->setEnabled(false);
}

void Widget::on_radioButton_other_clicked()
{
    // 将界面上的内容进行更新
    ui->label->setText("你选择的性别为:其它");
}

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

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

相关文章

生成对抗网络(GAN)损失函数解读

GAN损失函数的形式: 以下是对每个部分的解读: 1. ⁡, ​ :这个部分表示生成器(Generator)G的目标是最小化损失函数。 :判别器(Discriminator)D的目标是最大化损失函数。 GAN的训…

汇编语言学习(三)——DoxBox中debug的使用

目录 一、安装DoxBox,并下载汇编工具(MASM文件) 二、debug是什么 三、debug中的命令 一、安装DoxBox,并下载汇编工具(MASM文件) 链接: https://pan.baidu.com/s/1IbyJj-JIkl_oMOJmkKiaGQ?pw…

数据可视化交互

目录 【实验目的】 【实验原理】 【实验环境】 【实验步骤】 一、安装 pyecharts 二、下载数据 三、实验任务 实验 1:AQI 横向对比条形图 代码说明: 运行结果: 实验 2:AQI 等级分布饼图 实验 3:多城市 AQI…

安宝特方案丨从依赖经验到数据驱动:AR套件重构特种装备装配与质检全流程

在高压电气装备、军工装备、石油测井仪器装备、计算存储服务器和机柜、核磁医疗装备、大型发动机组等特种装备生产型企业,其产品具有“小批量、多品种、人工装配、价值高”的特点。 生产管理中存在传统SOP文件内容缺失、SOP更新不及、装配严重依赖个人经验、产品装…

【JavaEE】万字详解HTTP协议

HTTP是什么?-----互联网的“快递小哥” 想象我们正在网上购物:打开淘宝APP,搜索“蓝牙耳机”,点击商品图片,然后下单付款。这一系列操作背后,其实有一个看不见的“快递小哥”在帮我们传递信息,…

华为云Flexus+DeepSeek征文 | MaaS平台避坑指南:DeepSeek商用服务开通与成本控制

作者简介 我是摘星,一名专注于云计算和AI技术的开发者。本次通过华为云MaaS平台体验DeepSeek系列模型,将实际使用经验分享给大家,希望能帮助开发者快速掌握华为云AI服务的核心能力。 目录 作者简介 前言 一、技术架构概览 1.1 整体架构设…

【动态规划】B4336 [中山市赛 2023] 永别|普及+

B4336 [中山市赛 2023] 永别 题目描述 你做了一个梦,梦里有一个字符串,这个字符串无论正着读还是倒着读都是一样的,例如: a b c b a \tt abcba abcba 就符合这个条件。 但是你醒来时不记得梦中的字符串是什么,只记得…

可下载旧版app屏蔽更新的app市场

软件介绍 手机用久了,app越来越臃肿,老手机卡顿成常态。这里给大家推荐个改善老手机使用体验的方法,还能帮我们卸载不需要的app。 手机现状 如今的app不断更新,看似在优化,实则内存占用越来越大,对手机性…

claude3.7高阶玩法,生成系统架构图,国内直接使用

文章目录 零、前言一、操作指南操作指导 二、提示词模板三、实战图书管理系统通过4o模型生成系统描述通过claude3.7生成系统架构图svg代码转换成图片 在线考试系统通过4o模型生成系统描述通过claude3.7生成系统架构图svg代码转换成图片 四、感受 零、前言 现在很多AI大模型可以…

河北对口计算机高考MySQL笔记(完结版)(2026高考)持续更新~~~~

MySQL 基础概念 数据(Data):文本,数字,图片,视频,音频等多种表现形式,能够被计算机存储和处理。 **数据库(Data Base—简称DB):**存储数据的仓库…

2025-06-01-Hive 技术及应用介绍

Hive 技术及应用介绍 参考资料 Hive 技术原理Hive 架构及应用介绍Hive - 小海哥哥 de - 博客园https://cwiki.apache.org/confluence/display/Hive/Home(官方文档) Apache Hive 是基于 Hadoop 构建的数据仓库工具,它为海量结构化数据提供类 SQL 的查询能力&#xf…

AI书签管理工具开发全记录(十八):书签导入导出

文章目录 AI书签管理工具开发全记录(十八):书签导入导出1.前言 📝2.书签结构分析 📖3.书签示例 📑4.书签文件结构定义描述 🔣4.1. ​整体文档结构​​4.2. ​核心元素类型​​4.3. ​层级关系4.…

docker容器互联

1.docker可以通过网路访问 2.docker允许映射容器内应用的服务端口到本地宿主主机 3.互联机制实现多个容器间通过容器名来快速访问 一 、端口映射实现容器访问 1.从外部访问容器应用 我们先把之前的删掉吧(如果不删的话,容器就提不起来,因…

安宝特案例丨寻医不再长途跋涉?Vuzix再次以AR技术智能驱动远程医疗

加拿大领先科技公司TeleVU基于Vuzix智能眼镜打造远程医疗生态系统,彻底革新患者护理模式。 安宝特合作伙伴TeleVU成立30余年,沉淀医疗技术、计算机科学与人工智能经验,聚焦医疗保健领域,提供AR、AI、IoT解决方案。 该方案使医疗…

Modbus转Ethernet IP深度解析:磨粉设备效率跃升的底层技术密码

在建材矿粉磨系统中,开疆智能Modbus转Ethernet IP网关KJ-EIP-101的应用案例是一个重要的技术革新。这个转换过程涉及到两种主要的通信协议:Modbus和Ethernet IP。Modbus是一种串行通信协议,广泛应用于工业控制系统中。它简单、易于部署和维护…

在MobaXterm 打开图形工具firefox

目录 1.安装 X 服务器软件 2.服务器端配置 3.客户端配置 4.安装并打开 Firefox 1.安装 X 服务器软件 Centos系统 # CentOS/RHEL 7 及之前(YUM) sudo yum install xorg-x11-server-Xorg xorg-x11-xinit xorg-x11-utils mesa-libEGL mesa-libGL mesa-…

旋量理论:刚体运动的几何描述与机器人应用

旋量理论为描述刚体在三维空间中的运动提供了强大而优雅的数学框架。与传统的欧拉角或方向余弦矩阵相比,旋量理论通过螺旋运动的概念统一了旋转和平移,在机器人学、计算机图形学和多体动力学领域具有显著优势。这种描述不仅几何直观,而且计算…

运动控制--BLDC电机

一、电机的分类 按照供电电源 1.直流电机 1.1 有刷直流电机(BDC) 通过电刷与换向器实现电流方向切换,典型应用于电动工具、玩具等 1.2 无刷直流电机(BLDC) 电子换向替代机械电刷,具有高可靠性,常用于无人机、高端家电…

Redis专题-实战篇一-基于Session和Redis实现登录业务

GitHub项目地址:https://github.com/whltaoin/redisLearningProject_hm-dianping 基于Session实现登录业务功能提交版本码:e34399f 基于Redis实现登录业务提交版本码:60bf740 一、导入黑马点评后端项目 项目架构图 1. 前期阶段2. 后续阶段导…

【前端实战】如何让用户回到上次阅读的位置?

目录 【前端实战】如何让用户回到上次阅读的位置? 一、总体思路 1、核心目标 2、涉及到的技术 二、实现方案详解 1、基础方法:监听滚动,记录 scrollTop(不推荐) 2、Intersection Observer 插入探针元素 3、基…