【Qt】按钮类控件(二)

文章目录

  • 按钮类控件
      • 1、Push Button
          • 代码示例: 带有图标的按钮
          • 代码示例: 带有快捷键的按钮
      • 2、Radio Buttion
          • 代码示例: click, press, release, toggled 的区别
          • 代码示例: 单选框分组(QButtonGroup)
      • 3、 Check Box
          • 代码示例: 获取复选按钮的取值

按钮类控件

1、Push Button

使⽤ QPushButton 表示⼀个按钮. 这也是当前我们最熟悉的⼀个控件了.
QPushButton 继承⾃ QAbstractButton . 这个类是⼀个抽象类. 是其他按钮的父类.
在这里插入图片描述

属性说明
text按钮中的⽂本
icon按钮中的图标
iconSize按钮中图标的尺⼨
shortCut按钮对应的快捷键
autoRepeat按钮是否会重复触发. 当⿏标左键按住不放时,如果设为 true, 则会持续产⽣⿏标点击事件;如果设为 false, 则必须释放⿏标, 再次按下⿏标时才能产⽣点击事件.(相当于游戏⼿柄上的 “连发” 效果)
autoRepeatDelay重复触发的延时时间. 按住按钮多久之后, 开始重复触发.
autoRepeatInterval重复触发的周期.
  1. QAbstractButton 作为 QWidget 的⼦类, 当然也继承了 QWidget 的属性. 上⾯
    介绍的 QWidget ⾥的各种属性⽤法, 对于 QAbstractButton 同样适⽤. 因此表格仅
    列出 QAbstractButton 独有的属性.
  2. Qt 的 api 设计⻛格是⾮常清晰的. 此处列出的属性都是可以 获取 和 设置 的. 例如, 使用text() 获取按钮⽂本; 使⽤ setText() 设置⽂本.

事实上, QPushButton 的核⼼功能都是 QAbstractButton 提供的. ⾃⾝提供的属性都⽐较简单.
其中 default 和 audoDefault 影响的是按下 enter 时⾃动点击哪个按钮的⾏为; flat 把按钮设置为扁平的样式. 这⾥我们暂时都不做过多关注

代码示例: 带有图标的按钮
  1. 创建 resource.qrc ⽂件, 并导⼊图⽚
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->setupUi(this);QIcon icon(":/button_blud.png");ui->pushButton->setIcon(icon);ui->pushButton->setIconSize(QSize(100,100));//这里并不能直接使用,需要使用QSize对象进行传入
}

Alt

代码示例: 带有快捷键的按钮

在这里插入图片描述

#include "widget.h"
#include "ui_widget.h"
#include<QIcon>
#include<QRect>
#include<QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->pushButton_target->setIcon(QIcon(":/image/dog.png"));ui->pushButton_target->setIconSize(QSize(160,160));//鼠标点击ui->pushButton_up->setIcon(QIcon(":/image/up.png"));ui->pushButton_down->setIcon(QIcon(":/image/down.png"));ui->pushButton_left->setIcon(QIcon(":/image/left.png"));ui->pushButton_right->setIcon(QIcon(":/image/right.png"));//快捷键//ui->pushButton_up->setShortcut('W');//更推荐下面的方法,因为上面的方法并不会报错使用下面的更加谨慎ui->pushButton_up->setShortcut(Qt::Key::Key_W);ui->pushButton_down->setShortcut(Qt::Key::Key_S);ui->pushButton_left->setShortcut(Qt::Key::Key_A);ui->pushButton_right->setShortcut(Qt::Key::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()
{const QRect& rect=ui->pushButton_target->geometry();ui->pushButton_target->setGeometry(rect.x(),rect.y()-10,rect.width(),rect.height());qDebug()<<"up";
}void Widget::on_pushButton_down_clicked()
{const QRect& rect=ui->pushButton_target->geometry();ui->pushButton_target->setGeometry(rect.x(),rect.y()+10,rect.width(),rect.height());qDebug()<<"up";
}void Widget::on_pushButton_left_clicked()
{const QRect& rect=ui->pushButton_target->geometry();ui->pushButton_target->setGeometry(rect.x()-10,rect.y(),rect.width(),rect.height());qDebug()<<"up";
}void Widget::on_pushButton_right_clicked()
{const QRect& rect=ui->pushButton_target->geometry();ui->pushButton_target->setGeometry(rect.x()+10,rect.y(),rect.width(),rect.height());qDebug()<<"up";
}

• 使⽤ setShortcut 给按钮设置快捷键. 参数是⼀个 QKeySequence 对象. 表⽰⼀个按键序列. ⽀持组合键 (ctrl + c 这种).
• QKeySequence 的构造函数参数, 可以直接使⽤ “ctrl+c” 这样的按键名字符串表示例, 也可以使⽤预定义好的常量 (形如 Qt::CTRL + Qt::Key_C ) 表示。

1 // 开启重复触发
2 ui->pushButton_up->setAutoRepeat(true);
3 ui->pushButton_down->setAutoRepeat(true);
4 ui->pushButton_left->setAutoRepeat(true);
5 ui->pushButton_right->setAutoRepeat(true);

重复触发,快捷键是默认是支持重复触发的,鼠标是默认不支持的,但是鼠标重复触发是支持修改的,但是快捷键重复触发是修改不了的。

在这里插入图片描述

2、Radio Buttion

QRadioButton 是单选按钮. 可以让我们在多个选项中选择⼀个.
作为 QAbstractButton 和 QWidget 的⼦类, 上⾯介绍的属性和⽤法, 对于 QRadioButton
同样适⽤.
QAbstractButton 中和 QRadioButton 关系较⼤的属性

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

代码示例: 选择性别

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//设置一个默认的选项ui->radioButton->setChecked(true);ui->label->setText("您默认的性别是:男");//禁用其他选项//checkable 只是能够让按钮不被选中,但是仍然是可以响应点击事件的。//ui->radioButton_3->setCheckable(false);ui->radioButton_3->setEnabled(false);//ui->radioButton_3->setDisabled(true);
}Widget::~Widget()
{delete ui;
}void Widget::on_radioButton_clicked()
{ui->label->setText("您选择的性别是:男");
}void Widget::on_radioButton_2_clicked()
{ui->label->setText("您选择的性别是:女");
}void Widget::on_radioButton_3_clicked()
{ui->label->setText("您选择的性别是:其他");
}

在这里插入图片描述

代码示例: click, press, release, toggled 的区别

• clicked 表示⼀次 “点击”
• pressed 表示⿏标 “按下”
• released 表示⿏标 “释放”
• toggled 表示按钮状态切换.

在这里插入图片描述

在这里简单的介绍一下信号,clicked()=pressed()+released();
clicked(bool) bool就表示radiobutton是否被选中的状态,当它被设置为setCheckable(false);不可选中的状态时,bool就会一直是false
toggled(bool),就表示当bool状态发生改变,就会触发这个信号。当点击他这个按钮时会触发按钮,bool并为true,当点击别的按钮时,就会触发toggled(),bool并为false。

clicked(bool)

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//ui->radioButton->setCheckable(false);
}Widget::~Widget()
{delete ui;
}void Widget::on_radioButton_clicked(bool checked)
{qDebug()<<"clicked()"<<checked;
}

在这里插入图片描述

void Widget::on_radioButton_clicked(bool checked)
{qDebug()<<"clicked()"<<checked;
}void Widget::on_radioButton_2_toggled(bool checked)
{qDebug()<<"toggled()"<<checked;
}void Widget::on_radioButton_3_pressed()
{qDebug()<<"pressed()";
}void Widget::on_radioButton_4_released()
{qDebug()<<"released()";
}

按顺序点击按钮,并在最后再次点击clicked(bool)
.在这里插入图片描述

• clicked 是⼀次⿏标按下+⿏标释放触发的.
• pressed 是⿏标按下触发的.
• released 是⿏标释放触发的.
• toggled 是 checked 属性改变时触发的.
总的来说, toggled 是最适合 QRadioButton 的

代码示例: 单选框分组(QButtonGroup)

如果不进行分组处理,那我们的所有组就只能点击一个按钮,因为全是单选按钮

#include "widget.h"
#include "ui_widget.h"
#include<QButtonGroup>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//使用QButtonGroup对单选按钮进行分组QButtonGroup* g1=new QButtonGroup(this);QButtonGroup* g2=new QButtonGroup(this);QButtonGroup* g3=new QButtonGroup(this);//把按钮进行分组g1->addButton(ui->radioButton);g1->addButton(ui->radioButton_2);g1->addButton(ui->radioButton_3);g2->addButton(ui->radioButton_4);g2->addButton(ui->radioButton_5);g2->addButton(ui->radioButton_6);g3->addButton(ui->radioButton_7);g3->addButton(ui->radioButton_8);
}

在这里插入图片描述

3、 Check Box

QCheckBox 表⽰复选按钮. 可以允许选中多个.
和 QCheckBox 最相关的属性也是 checkable 和 checked , 都是继承⾃QAbstractButton .

代码示例: 获取复选按钮的取值
QString result="索大的刀是:";
void Widget::on_checkBox_clicked(bool checked)
{if(checked){result+=ui->checkBox->text()+" ";ui->label->setText(result);}
}void Widget::on_checkBox_6_clicked(bool checked)
{if(checked){result+=ui->checkBox_6->text()+" ";ui->label->setText(result);}
}void Widget::on_checkBox_8_clicked(bool checked)
{if(checked){result+=ui->checkBox_8->text();ui->label->setText(result);}
}

在这里插入图片描述

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

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

相关文章

mac苹果电脑卡顿反应慢如何解决?2024最新免费方法教程

苹果电脑以其稳定的性能、出色的设计和高效的操作系统&#xff0c;赢得了广大用户的喜爱。然而&#xff0c;随着时间的推移&#xff0c;一些用户会发现自己的苹果电脑开始出现卡顿、反应慢等问题。这不仅影响使用体验&#xff0c;还会影响工作效率。那么&#xff0c;面对这些问…

如何注册google谷歌gmail邮箱账号?创建谷歌帐号遇到:此电话号码无法用于验证或此电话号码验证次数太多怎么办?

googel谷歌账号&#xff0c;又称为“gmail邮箱账号”主要用于登录谷歌产品服务或第三方支持谷歌账号登录的产品或服务。而部分用户在创建注册谷歌账号时&#xff0c;可能会遇到下以问题。 1、您无法创建谷歌账号&#xff1b; 2、此电话号码无法用于验证&#xff1b; 3、此电…

LED出海混战,雷曼光电“冲锋陷阵”的数智化暗线

2022年春天&#xff0c;在北京冬奥会开幕式上&#xff0c;晶莹剔透的“冰雪五环”从巨型冰块中徐徐升起&#xff0c;成为国人经典集体回忆。这个面积达134平方米、重约3吨的冰雪五环&#xff0c;是LED技术与光影艺术的完美融合。深圳LED上市公司雷曼光电参与“冰雪五环”异形屏…

【hackmyvm】 Animetronic靶机

靶机测试 arp-scanporturl枚举exiftool套中套passwordsudo 提权 arp-scan arp-scan 检测局域网中活动的主机 192.168.9.203 靶机IP地址port 通过nmap扫描&#xff0c;获取目标主机的端口信息 ┌──(root㉿kali)-[/usr/share/seclists] └─# nmap -sT -sV -O 192.16…

win10无法被远程桌面连接,Win10系统无法被远程桌面连接的原因有哪些

win10无法被远程桌面连接&#xff0c;Win10系统无法被远程桌面连接的原因有哪些&#xff1f; 先&#xff0c;我们需要明确Win10系统无法被远程桌面连接的可能原因。其中&#xff0c;最常见的原因包括&#xff1a;远程桌面功能未启用、网络连接问题、防火墙或安全软件设置不当、…

泰尔指数和泰尔指数模型:代码、案例及复现

泰尔指数模型是衡量个人或地区收入差距的重要工具。参考朱红根&#xff08;2023年&#xff09;老师的方法&#xff0c;《农业经济问题》使用泰尔指数分析了中国不同地区数字乡村发展水平的差异。该资料包括了Stata全流程代码、案例数据、参考文献&#xff0c;并提供了Excel计算…

在Ubuntu安装Carla时按照官方的教程将下载好的资源包解压放到Unreal\CarlaUE4\Content\Carla后执行./Update.sh

在Ubuntu安装Carla时按照官方的教程将下载好的资源包解压放到 Unreal\CarlaUE4\Content\Carla后执行./Update.sh 结果出现&#xff0c;将原来的Carla文件夹备份了有创建了一个新的空白Carla文件夹 原来自己下载解压后就不用再执行./Update.sh这个了&#xff0c;这个命令就是…

蓝桥杯成绩已出

蓝桥杯的成绩早就已经出来了&#xff0c;虽然没有十分惊艳 &#xff0c;但是对于最终的结果我是心满意足的&#xff0c;感谢各位的陪伴&#xff0c;关于蓝桥杯的刷题笔记我已经坚持更新了49篇&#xff0c;但是现在即将会告别一段落&#xff0c;人生即将进入下一个规划。我们一起…

crossover下载英雄联盟 crossover lol mac玩英雄联盟手游 MacBook怎么安装英雄联盟

十年陪伴&#xff0c;无限热爱&#xff01;风靡全球的MOBA经典之作。 真正的5V5公平竞技对战&#xff0c;传承端游纯正体验。人气英雄&#xff0c;经典还原&#xff1b;公平竞技&#xff0c;实力至上&#xff1b;峡谷传说&#xff0c;掌心再现。策略、战术、意识、配合&#x…

使用Matplotlib绘制正弦和余弦函数曲线

前言 在数据可视化领域&#xff0c;Matplotlib是一个功能强大的Python库&#xff0c;它允许用户创建各种静态、交互式和动画图形。本文将引导您通过一个简单的示例&#xff0c;学习如何使用Matplotlib绘制正弦和余弦函数曲线。 第一步&#xff1a;导入必要的库&#xff1a; …

以“数”赋能 成都数字产业园筑梦数字经济新“蓝海”

发展数字经济是拉动经济增长的重要引擎和产业升级的突破口&#xff0c;这一观点在当前全球经济发展的大环境下愈发显得重要。成都数字产业园——国际数字影像产业园&#xff0c;作为这一趋势的积极践行者&#xff0c;正立足自身发展&#xff0c;抢抓机遇&#xff0c;发挥优势&a…

设计模式1——初步认识篇

设计模式1——初步认识篇 一、先让我们浅聊一下面向对象和设计模式。 说起设计模式&#xff0c;我第一次听到它&#xff0c;是在学习面向对象的时候。那么什么是面向对象&#xff0c;什么是设计模式&#xff0c;而且设计模式和面向对象又有什么关系呢&#xff1f; 1、什么是面…

六一儿童节活动方案策划怎么写?

六一儿童节活动方案策划不难&#xff0c;一般看前人策划的案例就可以仿写一篇充满创意的儿童节活动方案。 当然&#xff0c;你也可以照着下面的模版直接写&#xff1a; 成年人的时间是离弦的箭 向着目标,一往无前 孩子的时间是旋转木马 载着今天和明天转啊转啊圈圈 成年人…

debian testing (预计13版本)wps字体无法正常显示

背 景 本人使用debian办公&#xff0c;原来使用的是debian 12,由于“生命不息&#xff0c;折腾不止“&#xff0c;终于将稳定版的debian 12升级为testing. 结果发现&#xff0c;debian 12能够正常使用的wps存在部分字体无法正常显示&#xff0c;经研究发现&#xff0c;原来是w…

opencv绘制灰度直方图-------c++

灰度直方图 cv::Mat opencvTool::calculateHistogram(const cv::Mat& image) {// 如果输入图像尚未处于灰度级&#xff0c;请将其转换为灰度级cv::Mat grayscale_image;if (image.channels() > 1){cv::cvtColor(image, grayscale_image, cv::COLOR_BGR2GRAY);}else{gra…

MultiBoot 和 QuickBoot

目录 MultiBoot简介MultiBoot 实现方式设置 bitstream 属性使用 ICAPE2 原语WBSTAR 寄存器定义 MultiBoot 工作流程生成mcs固化文件 Tcl 指令Fallback状态寄存器MultiBoot 正常加载状态看门狗1超时状态看门狗2超时状态CRC 错误和无 DESYNC 命令IDCODE 错误状态CRC 错误状态 Wat…

教你解决PUBG绝地求生登不进去 无法进入游戏 启动很慢的问题

尽管《绝地求生》&#xff08;PUBG&#xff09;以它那扣人心弦的战术竞技和逼真模拟的战场氛围风靡全球&#xff0c;揽获无数玩家的喜爱&#xff0c;但一些玩家在经历了一场血脉喷张的生存较量后&#xff0c;却不得不面对一个不那么愉悦的后续&#xff1a;游戏在结算阶段后出现…

window10下安装ubuntu系统以及docker使用

window10下安装ubuntu系统以及docker使用 1. 启用适用于Linux的Windwos子系统2.下载Linux内核更新包3.将 WSL 2 设置为默认版本4.安装Ubuntu<br />直接去Microsoft store里面直接搜索Ubuntu进行安装。5.可能出现的问题1.win10启动ubuntu报错 参考的对象类型不支持尝试的操…

网络管理实验四、SNMP协议分析

1 实验概括 实验目的 捕获SNMP报文&#xff0c;通过报文分析进一步理解SNMP的报文结构、MIB-2树的结构、理解管理信息结构SMI及其规定的ASN.1。 实验内容 1、自行挑选两个网管对象&#xff0c;分别使用get&#xff0c;get-next取其值。 2、使用抓包软件抓取数据包。 3、分析并…

C++学习第二十七课:C++ 中的智能指针详解

在 C 中&#xff0c;内存管理是每个程序员都需要面对的问题。在处理动态分配的内存时&#xff0c;如果忘记释放内存&#xff0c;可能会导致内存泄漏。为了解决这个问题&#xff0c;C11 引入了智能指针的概念。本文将详细介绍 C 中使用智能指针的方法&#xff0c;并结合实际案例…