当前位置: 首页 > 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

相关文章:

Qt常用控件 按钮

文章目录 1. QAbstractButton 简介2. QPushButton2.1 例子1&#xff0c;设置按钮的图标2.2 例子2&#xff0c;设置按钮快捷键 3. QRadioButton3.1 介绍3.2 例子1&#xff0c;选择性别3.3 例子2&#xff0c;试试其他的信号3.3 例子3&#xff0c;分组 4. QCheckBox4.1 介绍4.2 例…...

MySQL学习/复习10视图/用户/权限/语言连接数据库

一、视图 1.1创建视图 1.2视图影响基表 1.3基表影响视图 1.4删除视图 1.5视图使用规则 二、数据库的用户 2.1mysql中的user表 注意事项&#xff1a;主机/用户名/密码/权限 2.2用户的创建 注意事项&#xff1a;设置密码与登录地点需谨慎 2.3删除用户 注意事项&#xff1a;% 2.4…...

vulfocus在线靶场:tomcat-pass-getshell 弱口令 速通手册

目录 一、启动环境&#xff0c;访问页面&#xff0c;并登录&#xff0c;账号密码都是tomcat 二、哥斯拉打war包&#xff0c;图解 三、上传war包&#xff0c;图解 四、访问我们直接url/木马文件名/木马文件.jsp&#xff0c;是否存在了 五、 哥斯拉测试连接结果success&…...

c#:winform调用bartender实现打印(学习整理笔记)

效果 学习路径 C# winform调用Bartender进行自定义打印、批量打印、检索文件夹中的模板_哔哩哔哩_bilibili 一、初始环境搭建见&#xff1a; c#:winform引入bartender-CSDN博客https://blog.csdn.net/weixin_46001736/article/details/143989473?sharetypeblogdetail&s…...

牛客题库 21738 牛牛与数组

牛牛与数组题目链接 题目大意 牛牛喜欢这样的数组: 1:长度为n 2:每一个数都在1到k之间 3:对于任意连续的两个数A,B,A<=B 与(A % B != 0) 两个条件至少成立一个请问一共有多少满足条件的数组,对 1 e 9 + 7 1e^9+7 1e9+7 取模 输入格式 输入两个整数 n , k n,k n,…...

探索PDFMiner:Python中的PDF解析利器

文章目录 **探索PDFMiner&#xff1a;Python中的PDF解析利器**1. 背景介绍&#xff1a;为何选择PDFMiner&#xff1f;2. PDFMiner是什么&#xff1f;3. 如何安装PDFMiner&#xff1f;4. 简单库函数使用方法4.1 提取文本4.2 获取页面布局信息4.3 提取表格数据4.4 提取图像 5. 应…...

掌握Go语言中的异常控制:panic、recover和defer的深度解析

掌握Go语言中的异常控制:panic、recover和defer的深度解析 在Go语言的编程世界中,异常处理是一个不可忽视的话题。Go语言提供了panic、recover和defer三个关键字来处理程序中的异常情况。本文将深入探讨这三个关键字的工作原理、使用场景和最佳实践,帮助读者在实际编程中更…...

云讷科技Kerloud无人飞车专利发布

云讷科技Kerloud无人飞车获得了“一种室内外两用的四旋翼无人飞车”的实用新型专利证书&#xff0c;作为科教社区第一款四旋翼飞车&#xff0c;这项技术结合了无人机和无人车的优势&#xff0c;提供了一种能够在多种环境下使用的多功能飞行器。 这项设计的优势如下&#xff…...

企业信息化-走进身份管理之搭建篇

​一、身份管理是什么 我们先要弄懂统一身份管理到底是什么&#xff1f; 统一身份管理&#xff08;Unified Identity Manager&#xff0c;UIM&#xff09;&#xff0c;身份管理&#xff08;Identity Management&#xff0c;简称IDM&#xff09;&#xff0c;也被称为IAM&#…...

实践指南:EdgeOne与HAI的梦幻联动

在当今快速发展的数字时代&#xff0c;安全和速度已成为网络服务的基石。EdgeOne&#xff0c;作为腾讯云提供的边缘安全加速平台&#xff0c;以其全球部署的节点和强大的安全防护功能&#xff0c;为用户提供了稳定而高效的网络体验。而HAI&#xff08;HyperApplicationInventor…...

Exploring Prompt Engineering: A Systematic Review with SWOT Analysis

文章目录 题目摘要简介方法论背景相关工作评估结论 题目 探索快速工程&#xff1a;基于 SWOT 分析的系统评价 论文地址&#xff1a; https://arxiv.org/abs/2410.12843 摘要 在本文中&#xff0c;我们对大型语言模型 (LLM) 领域的提示工程技术进行了全面的 SWOT 分析。我们强…...

ByteBuffer 与 ByteBuf 的对比与优缺点分析

在 Java 网络编程和高性能 I/O 场景中&#xff0c;ByteBuffer 和 ByteBuf 是两种重要的缓冲区处理工具。ByteBuffer 是 Java NIO 标准库的一部分&#xff0c;而 ByteBuf 是由 Netty 框架提供的增强缓冲区工具。在实际开发中&#xff0c;选择哪一种取决于场景需求和性能目标。 …...

js高级06-ajax封装和跨域

8.1、ajax简介及相关知识 8.1.1、原生ajax 8.1.1.1、AJAX 简介 AJAX 全称为 Asynchronous JavaScript And XML&#xff0c;就是异步的 JS 和 XML。 通过 AJAX 可以在浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;无刷新获取数据。 按需请求&#xff0c;可…...

RabbitMQ3:Java客户端快速入门

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…...

D 型 GaN HEMT 在功率转换方面的优势

氮化镓 (GaN) 是一种 III-V 族宽带隙半导体&#xff0c;由于在用作横向高电子迁移率晶体管 (HEMT) 时具有卓越的材料和器件性能&#xff0c;因此在功率转换应用中得到越来越多的采用。 HEMT 中产生的高击穿电场 (3.3 MV/cm) 和高二维电子气 (2DEG) 载流子迁移率 (2,000 cm 2 /…...

Java Web后端项目的特点和组成部分

技术栈 #### Java Web技术&#xff1a; - **Servlet**&#xff1a;Java Web的核心&#xff0c;用于处理HTTP请求。 - **WebServlet注解配置**&#xff1a;用于简化Servlet的配置。 - **HttpServlet基类**&#xff1a;大多数Servlet都继承自此基类。 - **请求响应处理**&#x…...

Vue3 + Vite + TS 项目引入 Eslint + Pritter

文章目录 一、ESLint 简介主要功能适用场景常用的 Eslint 配置项 二、Pritter 简介主要功能适用场景常用的 Prettier 配置项 三、Vue3 Vite TS 项目引入 Eslint Pritter1. 安装 ESLint2. 初始化 ESLint 配置3. 在 Vite 项目中启用 ESLint4. 在 VS Code 中启用 ESLint5. 集成…...

用Tauri框架构建跨平台桌面应用:1、Tauri快速开始

Tauri 是一个构建适用于所有主流桌面和移动平台的轻快二进制文件的框架。开发者们可以集成任何用于创建用户界面的可以被编译成 HTML、JavaScript 和 CSS 的前端框架&#xff0c;同时可以在必要时使用 Rust、Swift 和 Kotlin 等语言编写后端逻辑。 Tauri 是什么&#xff1f; |…...

Django实现智能问答助手-数据库方式读取问题和答案

扩展 增加问答数据库&#xff0c;通过 Django Admin 添加问题和答案。实现更复杂的问答逻辑&#xff0c;比如使用自然语言处理&#xff08;NLP&#xff09;库。使用前端框架&#xff08;如 Bootstrap&#xff09;增强用户界面 1.注册模型到 Django Admin&#xff08;admin.py…...

stm32利用LED配置基础寄存器+体验滴答定时器+hal库环境配置

P1 LED控制与流水灯效果实现 概述 大家好&#xff0c;今天我们来学习一下如何在STM32上控制LED灯&#xff0c;并且实现一个流水灯的效果。这不仅是一个基础的实践&#xff0c;也是嵌入式开发中非常常见的需求。 LED控制 1. LED初始化 首先&#xff0c;我们需要对LED灯对应…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...