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

Qt常用控件之按钮

Qt常用控件之按钮

  • 1.PushButton
    • 1.1.按钮图标
    • 1.2.快捷键
  • 2.RadioButton
  • 2.1.性别选择
  • 2.2.了解其余的四个常用信号
  • 2.3.点餐小程序
  • 3. CheckBox

🌟🌟hello,各位读者大大们你们好呀🌟🌟
🚀🚀系列专栏:【Qt的学习】
📝📝本篇内容:PushButton;按钮图标;快捷键;RadioButton;性别选择;了解其余的四个常用信号;点餐小程序;CheckBox
⬆⬆⬆⬆上一篇:Qt之常用控件之QWidget(四)
💖💖作者简介:轩情吖,请多多指教(>> •̀֊•́ ) ̖́-

1.PushButton

讲完窗口后就该将其他一些常用的控件,我们先来看看按钮中的PushButton,这个按钮就是非常普通的按钮,但是有一些细节也需要注意一下。在前面提到过,PushButton它是继承于QAbstractButton这个类的,它又是继承于QWidget的,因此我们的QPushButton也可以使用QWidget的各种属性和函数。QAbstractButton这个类翻译到中文来讲就是抽象类,在C++抽象类不能构造对象出来,必须创建子类并要重写纯虚函数才能创建出实例来,它主要是为了定义按钮的通用属性和方法。
接下来还是讲一些它的属性

函数声明函数说明
QString text() const按钮文本
QIcon icon() const按钮图标
QSize iconSize() const按钮中图标的大小
void setShortcut(const QKeySequence &key);按钮的快捷键
void setAutoRepeat(bool)按钮是否会重复触发,当⿏标左键按住不放时,如果设为 true,则会持续产⽣⿏标点击事件;如果设为 false, 则必须释放⿏标,再次按下⿏标时才能产⽣点击事件
void setAutoRepeatInterval(int)重复触发的周期

1.1.按钮图标

这些属性其实都是继承于QAbstractButton的,QPushButton自身的属性其实都比较简单
接下来我们试一下给按钮添加图标,这还是有应用场景的
在这里插入图片描述
还是和前面讲的一样,需要导入图片文件到qrc中

在这里插入图片描述
我们也可以将文字去掉,看上去会更舒服
在这里插入图片描述

1.2.快捷键

接下来要讲一讲快捷键这个属性了
我们还是以以前的一个例子来举例,通过四个箭头按钮来控制一个按钮移动
先将五个图片导入到qrc文件中
在这里插入图片描述
我这里创建了一个文件夹来放这几张图片,在项目文件中看上去会更整洁一些,但是到时候填写文件路径的时候需要带上这个image。可能有的同学那边会打不开这个文件或者没有显示,这其实是一个bug,但是我们可以通过下拉上面的文件来进行查看
在这里插入图片描述
在我的实际使用过程中,还有一个比较严重的bug就是在创建玩.qrc文件后,如果没有去点击Add Prefix而是去点击查看其他的文件,就会导致这个文件创建成功,但是无法在Qt Creator左侧项目页面显示出来,因此导入的图片无法使用。
接下来就是在图形化界面拖拽五个按钮
在这里插入图片描述
在这里插入图片描述我们可以先把基础的图标先设置好,接下来跟以前写的程序一样,设置它四个按钮的信号处理函数(槽函数),下面的四个按钮的功能是控制上面一个按钮的上下左右移动
在这里插入图片描述
接下来就是最重要的设置快捷键,既然是快捷键,那肯定是程序运行就要可以使用的,那么就需要写在构造函数中。我们要使用到setShortcut函数,它的参数是一个QKeySequence类型的,它的构造函数可以接受是字符串也可以接受枚举
在这里插入图片描述
同时我们可以设置多个按键来作为快捷键
在这里插入图片描述
在使用中,还是更推荐使用枚举类型,因为使用枚举的话编译器会给我们进行检查是否有错,如果是字符串的话就可能因为疏忽而写错。
现在的话我们即可以使用按钮也可以使用快捷键,但是大家在尝试过程中不知道有没有发现我们的按钮的话如果鼠标长按做不到一直控制按钮移动,但是快捷键可以做到。这个就是我们前面讲的重复触发问题,键盘是默认支持的,但是鼠标需要我们进行设置
在这里插入图片描述
在写这个代码的时候,其实很多地方都是重复的,可以进行复制黏贴,因此如果大家习惯于vim中的使用方法的话也可以进行设置,在工具——选项中进行设置
在这里插入图片描述

//完整代码
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//1.先给按钮加上图片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));ui->pushButton_target->setIcon(QIcon(":/image/Naruto_cursor.png"));ui->pushButton_target->setIconSize(QSize(50,50));//设置快捷键-字母字符串ui->pushButton_up->setShortcut(QKeySequence("Ctrl+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::CTRL+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));//设置重复触发ui->pushButton_up->setAutoRepeat(true);ui->pushButton_down->setAutoRepeat(true);ui->pushButton_left->setAutoRepeat(true);ui->pushButton_right->setAutoRepeat(true);}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_up_clicked()
{QRect rec=ui->pushButton_target->geometry();//获取位置大小ui->pushButton_target->setGeometry(rec.x(),rec.y()-5,rec.width(),rec.height());//设置移动位置
}void Widget::on_pushButton_down_clicked()
{QRect rec=ui->pushButton_target->geometry();//获取位置大小ui->pushButton_target->setGeometry(rec.x(),rec.y()+5,rec.width(),rec.height());//设置移动位置
}void Widget::on_pushButton_left_clicked()
{QRect rec=ui->pushButton_target->geometry();//获取位置大小ui->pushButton_target->setGeometry(rec.x()-5,rec.y(),rec.width(),rec.height());//设置移动位置
}void Widget::on_pushButton_right_clicked()
{QRect rec=ui->pushButton_target->geometry();//获取位置大小ui->pushButton_target->setGeometry(rec.x()+5,rec.y(),rec.width(),rec.height());//设置移动位置
}

2.RadioButton

接下来要讲的是单选按钮,QAbstractButton中也有和RadioButton关系比较大的属性要来谈一谈
作为 QAbstractButton 和 QWidget 的⼦类, 之前介绍的属性和⽤法, 对于QRadioButton同样适⽤

函数声明函数说明
bool isCheckable() const现在是否是可以选中状态,即按钮是否可以被使用
void setCheckable(bool)设置按钮可否选中
bool isChecked() const是否被选中,isCheckable是isChecked的前提
void setChecked(bool)设置选中或者不选中
bool autoExclusive() constexclusive是专有的意思,这个函数的功能是得只是否按钮是否是排他的,即选中一个按钮,其他按钮就被取消选中了,对于RadioButton是默认的
void setAutoExclusive(bool)设置是否排他的

我们接下来要来写代码来更好的理解这些函数

2.1.性别选择

我们可以使用单选按钮来实现一个功能,即让用户选择性别,然后显示选择的内容
先在图形化界面上搞一个标签显示信息以及三个性别按钮(男,女,其他)
在这里插入图片描述
接下来就需要对三个单选按钮进行设置槽函数,当选择不同的按钮时显示不同的标签内容
在这里插入图片描述
其实在国外可能会有人选择“其他”,在国内不会,因此我们可以使用前面学到函数,将它设置为无法选中。同时我们可以设置一个默认选中的按钮
在这里插入图片描述

但是运行程序后会发现一个问题,我们的“其他”按钮虽然点不了了,但是标签还是触发修改了,说明setCheckable只能将设置为不可选中。因此我们需要使用之前在QWidget讲过的一个函数,setEnabled,将其直接设置为false即不可用,或者使用setDisabled函数为true也可以
在这里插入图片描述
在这里插入图片描述

2.2.了解其余的四个常用信号

这里是引用
接下来我们可以通过使用QRadioButton来了解下我们其他的几个信号
在这里插入图片描述
我们先来讲checked(bool),它其实和checked()是一样的功能,只是带不带参数,它的参数表明了这个按钮经过按下又抬起后是否有被选中,如果选中则为true,没有选中则为false,在上面的代码中在构造函数中设置了第一个单选按钮不可被选中,因此checked为false。第二个单选按钮是pressed()信号,它只需要数百哦按下即可触发。第三个单选按钮是released()信号,它是按下后抬起就会触发。第四个单选按钮是toggled(bool)信号,它选中需要的也是鼠标按下后又抬起,但是主要关注的是按钮的状态,如果现在是选中状态checked则为true,一旦取消后也会触发信号,checked则为false。
在这里插入图片描述

2.3.点餐小程序

接下来我们也可以通过QRadioButton来写一个点餐小程序,有三列,可以分别选择想要的食品
在这里插入图片描述
在这里插入图片描述
但是我们发现一个问题,一旦在一列中选择了一个后,再选其他列,则原来选择的则被取消了,这主要是RadioButton默认是排他的。因此我们需要使用到QButtonGroup来进行分组,一旦界面上需要存在多组单选按钮时,通过它来保证不会组与组间不会有影响。
在这里插入图片描述
在这里插入图片描述

3. CheckBox

最后一个要讲的按钮是复选框,它的作用就是能够达到多选的效果,像QWidget和QAbstractButton的一些函数它也是可以使用的。
与CheckBox最相关的也就是checkable和checked了,因此可以直接写代码

代码功能:选择今天准备干的事情,会有三个选项,通过标签进行显示选择的内容
我们现在图形化界面进行基本的框架搭建,通过确认按钮来触发最后的标签显示内容,因此对此按钮创建槽函数
在这里插入图片描述
通过代码来实现接下来的操作,在槽函数中判断按钮是否有被选中并设置文本
在这里插入图片描述
在这里插入图片描述

🌸🌸Qt常用控件之按钮大概就讲到这里啦,博主后续会继续更新更多Qt的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!如有小伙伴需要Qt的安装包可以私信我,你们的支持是博主坚持创作的动力!💪💪

http://www.dtcms.com/a/403696.html

相关文章:

  • 祝贺网站改版建设教育网站的目的
  • 网站建设验收需要注意什么怎样下载网页上的视频
  • 分布式专题——20 Kafka快速入门
  • SSH公钥私钥!进阶!SSH与Git!
  • 网站必须兼容哪些浏览器中核正式员工年收入
  • 珠海网站品牌设计公司简介网络新闻专题做的最好的网站
  • keepalived服务器
  • AI写的超级好用的课堂互动系统
  • 山东建设机械协会网站课程网站建设的设计报告
  • 第四部分:Netty核心源码解析(下)
  • 攻克 大 Excel 上传难题:从异步处理到并发去重的全链路解决方案
  • 【双光相机配准】红外相机与可见光相机配准方案
  • 中国建设银行网站个人客户wordpress 主题显示
  • 开源超级终端PuTTY改进之:增加点对点网络协议IocHub,实现跨网段远程登录
  • 帮别人做网站如何备案wordpress video plugin
  • 118. 杨辉三角(dp)
  • 济宁网站开发招聘威海建设集团官方网站
  • 【QT】QPainter的使用
  • 北京代理网站备案成都市建设工程交易中心网站
  • PyTorch 数据处理工具箱与可视化工具
  • python的高阶函数
  • Python请求示例JD商品评论API接口,json数据返回
  • Json格式化处理碰到的问题
  • 驱动开发(4)|鲁班猫rk356x镜像编译,及启用SPI控制器驱动
  • Rust语言了解
  • 深圳成交型网站建设天元建设集团有限公司企业号
  • 织梦系统做的网站忘记登录密码semir是什么品牌
  • Python实现ETF网格自动化交易集成动量阈值判断
  • 使用c语言连接数据库
  • 网站在百度找不到了王占山人物简介