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

Qt常用控件 按钮

文章目录

  • 1. QAbstractButton 简介
  • 2. QPushButton
    • 2.1 例子1,设置按钮的图标
    • 2.2 例子2,设置按钮快捷键
  • 3. QRadioButton
    • 3.1 介绍
    • 3.2 例子1,选择性别
    • 3.3 例子2,试试其他的信号
    • 3.3 例子3,分组
  • 4. QCheckBox
    • 4.1 介绍
    • 4.2 例子1,获取复选框的内容

1. QAbstractButton 简介

QPushButton 继承⾃ QAbstractButton。这个类是⼀个抽象类.是其他按钮的⽗类。QAbstractButton继承自QWidget

下面是QAbstractButton的一些属性

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

2. QPushButton

2.1 例子1,设置按钮的图标

创建qrc文件,并导入图片

image-20241117142305745

使用qt designer创建一个按钮

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

代码如下,使用了setIcon()setIconSize()

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QIcon icon(":/btnPic.png");ui->pushButton->setIcon(icon);ui->pushButton->setIconSize(QSize(100, 100));
}

效果如下

image-20241117142810637

2.2 例子2,设置按钮快捷键

导入图片

image-20241117153944517

image-20241117154009240

设置按钮

image-20241117154345209

编写代码,设置图标和快捷键

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 设置图标ui->targetBtn->setIcon(QIcon(":/img/plane"));ui->targetBtn->setIconSize(QSize(100, 100));ui->upBtn->setIcon(QIcon(":/img/up"));ui->upBtn->setIconSize(QSize(50, 50));ui->downBtn->setIcon(QIcon(":/img/down"));ui->downBtn->setIconSize(QSize(50, 50));ui->leftBtn->setIcon(QIcon(":/img/left"));ui->leftBtn->setIconSize(QSize(50, 50));ui->rightBtn->setIcon(QIcon(":/img/right"));ui->rightBtn->setIconSize(QSize(50, 50));// 设置快捷键ui->upBtn->setShortcut(Qt::Key_W);ui->downBtn->setShortcut(Qt::Key_S);ui->leftBtn->setShortcut(Qt::Key_A);ui->rightBtn->setShortcut(Qt::Key_D);
}

写槽函数

void Widget::on_upBtn_clicked()
{QRect pos = ui->targetBtn->geometry();ui->targetBtn->setGeometry(pos.x(), pos.y()-10, pos.width(), pos.height());
}void Widget::on_downBtn_clicked()
{QRect pos = ui->targetBtn->geometry();ui->targetBtn->setGeometry(pos.x(), pos.y()+10, pos.width(), pos.height());
}void Widget::on_leftBtn_clicked()
{QRect pos = ui->targetBtn->geometry();ui->targetBtn->setGeometry(pos.x()-10, pos.y(), pos.width(), pos.height());
}void Widget::on_rightBtn_clicked()
{QRect pos = ui->targetBtn->geometry();ui->targetBtn->setGeometry(pos.x()+10, pos.y(), pos.width(), pos.height());
}

完成了

image-20241117155843432

键盘快捷键默认一直按是有连发功能的,如果想让鼠标一直按也有连发功能,可以使用setAutoRepeate()方法

// 让upBtn有连发功能
ui->upBtn->setAutoRepeat(true);

如果想要触发按钮有多个按键,可以使用+号连接

// ctrl+w触发
ui->upBtn->setShortcut(Qt::CTRL+Qt::Key_W);

3. QRadioButton

3.1 介绍

单选按钮,继承自QAbstractButton ,下面是QRadioButton常用的QAbstractButton 的一些属性

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

同理,上面的属性都有一个setXXX()的方法

3.2 例子1,选择性别

widget.ui里设置基本界面

image-20241122222337628

槽函数如下

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->label->setText("选择的性别是: 男");    // 设置label的默认值
}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("选择的性别是: 其它");
}

如果想让这个按钮默认被选中,可以在构造函数这样写

ui->radioButton_male->setChecked(true);

如果不想让 其它 这个按钮被选择,可以在构造函数里这样写

ui->radioButton_other->setCheckable(false);

运行后发现,确实该按钮不能被选中了,但是仍然可以响应槽函数

image-20241122222756991

如果不想让其响应槽函数,可以直接设置enable属性,在QWidget里学过

ui->radioButton_other->setEnabled(false);

image-20241122222941832

3.3 例子2,试试其他的信号

widet.ui中拖上两个radiobutton,转到槽

image-20241123143851127

clicked()点击,preassed()按下,released() 释放信号,都很好理解。这里给这两个radiobutton提那几另外两个槽函数

void Widget::on_radioButton_1_clicked(bool checked)
{qDebug() << "on_radioButton_1_clicked checked: " << checked;
}void Widget::on_radioButton_2_toggled(bool checked)
{qDebug() << "on_radioButton_2_toggled: " << checked;
}

运行结果如下

image-20241123144508445

  • 可以看到,对于clicked(bool),当按钮被点击时,checked会被置成true,且每次点击都会触发。
  • 对于toggled(bool),当按钮被点击时,checked会被置成true,连续点击不会改变值,当按钮被切换时,会将checked置成false
  • toggled(bool) 非常适合使用于QRadioButton

3.3 例子3,分组

widget.ui中搭出基本框架

image-20241123160808157

image-20241123161309155

现在按钮是全部排它的,也就是这8个按钮只能选择1个,现在要将其分组,在widget.cpp的构造函数里写

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QButtonGroup* gp1 = new QButtonGroup(this);QButtonGroup* gp2 = new QButtonGroup(this);QButtonGroup* gp3 = new QButtonGroup(this);// 将按钮添加到GroupBox中gp1->addButton(ui->radioButton_A1);gp1->addButton(ui->radioButton_A2);gp1->addButton(ui->radioButton_A3);gp2->addButton(ui->radioButton_B1);gp2->addButton(ui->radioButton_B2);gp2->addButton(ui->radioButton_B3);gp3->addButton(ui->radioButton_C1);gp3->addButton(ui->radioButton_C2);
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4. QCheckBox

4.1 介绍

QCheckBox继承自QAbstractButton 表⽰复选按钮.可以允许选中多个,下面两个属性是比较常用的

属性说明
checkable是否能选中
checked是否已经被选中.checkable是checked的前提条件.

4.2 例子1,获取复选框的内容

widget.ui中创建3个复选框, 1个按钮

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

image-20241123164047503

QPushButton添加槽函数

void Widget::on_pushButton_clicked()
{QString s = "TODO: ";if(ui->checkBox->isChecked() == true) {s += ui->checkBox->text();s += " ";}if(ui->checkBox_2->isChecked() == true) {s += ui->checkBox_2->text();s += " ";}if(ui->checkBox_3->isChecked() == true) {s += ui->checkBox_3->text();s += " ";}ui->label->setText(s);
}

image-20241123164135005

http://www.lryc.cn/news/490637.html

相关文章:

  • MySQL学习/复习10视图/用户/权限/语言连接数据库
  • vulfocus在线靶场:tomcat-pass-getshell 弱口令 速通手册
  • c#:winform调用bartender实现打印(学习整理笔记)
  • 牛客题库 21738 牛牛与数组
  • 探索PDFMiner:Python中的PDF解析利器
  • 掌握Go语言中的异常控制:panic、recover和defer的深度解析
  • 云讷科技Kerloud无人飞车专利发布
  • 企业信息化-走进身份管理之搭建篇
  • 实践指南:EdgeOne与HAI的梦幻联动
  • Exploring Prompt Engineering: A Systematic Review with SWOT Analysis
  • ByteBuffer 与 ByteBuf 的对比与优缺点分析
  • js高级06-ajax封装和跨域
  • RabbitMQ3:Java客户端快速入门
  • D 型 GaN HEMT 在功率转换方面的优势
  • Java Web后端项目的特点和组成部分
  • Vue3 + Vite + TS 项目引入 Eslint + Pritter
  • 用Tauri框架构建跨平台桌面应用:1、Tauri快速开始
  • Django实现智能问答助手-数据库方式读取问题和答案
  • stm32利用LED配置基础寄存器+体验滴答定时器+hal库环境配置
  • JAVA开源项目 桂林旅游景点导游平台 计算机毕业设计
  • docker安装使用Elasticsearch,解决启动后无法访问9200问题
  • GM、BP、LSTM时间预测预测代码
  • 《操作系统 - 清华大学》4 -5:非连续内存分配:页表一反向页表
  • 志愿者小程序源码社区网格志愿者服务小程序php
  • Java语言编程,通过阿里云mongo数据库监控实现数据库的连接池优化
  • 使用ufw配置防火墙,允许特定范围IP访问
  • 实现 UniApp 右上角按钮“扫一扫”功能实战教学
  • 【2024亚太杯亚太赛APMCM C题】数学建模竞赛|宠物行业及相关产业的发展分析与策略|建模过程+完整代码论文全解全析
  • ubtil循环函数调用
  • 使用EFK收集k8s日志