【Qt】常用控件QPushButton

news2024/11/14 15:25:42

 常用控件QPushButton

QWidget中涉及的各种属性/函数/使用方法,对Qt中的各种控件都是有效的。

QPushButton继承自QAbstractButton。这个类是抽象类,是其他按钮的父类。

QAbstractButton中和QPushButton相关性比较大的属性。

属性说明

text

按钮中的⽂本

icon

按钮中的图标

iconSize

按钮中图标的尺⼨

shortCut

按钮对应的快捷键

autoRepeat

按钮是否会重复触发. 当⿏标左键按住不放时,

如果设为 true, 则会持续产⽣⿏标点击事件;

如果设为 false, 则必须释放⿏标, 再次按下⿏标时才能产⽣点击事件.

(相当于游戏⼿柄上的 "连发" 效果)

autoRepeatDelay

重复触发的延时时间. 按住按钮多久之后, 开始重复触发.

autoRepeatInterval

重复触发的周期.

例子:给按钮加图标

1.首先准备一张图片(可以在阿里巴巴矢量图标库免费查找)

2.将图片导入Qt中,使用qrc管理。(后续在编写代码的时候,如果需要使用图片等外部资源,都会优先考虑qrc管理,除非这个资源太大)

在Qt Creator中,创建好qrc文件之后,切换到代码编辑框,编写代码,如果想要再次查看qrc编辑器,点击之后可能是无效的。此时,可以找到下拉菜单进行点击即可。

3.编写代码

可以将尺寸变大

例子:给按钮添加快捷键

引入快捷键操作,通过四个按钮控制target按钮的移动。

(1)创建qrc文件,导入资源

此处按钮直接通过图片来表示。

将图片导入项目的时候,由于图片过多,如果不想再放在项目根目录下面,就可以创建一个新目录(image目录),将图片放在新目录里面,此时意味着后续访问这些图片,就需要再在路径上带上image这一级目录名字。

(2)创建ui文件,创建界面 

通过点阵,可以将按钮进行对齐,后序的学习过程中还会介绍更好的方式来完成上述“”对齐

这是Qt程序运行过程中,对象树的模样。可以很直观的看到对象结构,以及每个对象的objectName

(3)编写构造函数,完成初始化操作

(4)实现方向键的槽函数

(5)设置快捷键(关键要点)------需要在Widget的构造函数中完成,程序一旦启动,快捷键就是有效果的。

参数是一个QKeySequence对象,按下的快捷键不一定是单个按键,也可能是组合键。

这种方式是直接通过按键的名字来设置,虽然简单,但是容易写错。

可以通过按键的枚举的方式来设置

加上ctrl键

(6)连发功能

键盘快捷键默认就是可以连发的,但是鼠标点击按钮则不行。

代码实现:

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

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

    //设置图标
    //target
    ui->pushButton_target->setIcon(QIcon(":/image/dogHead.png"));
    ui->pushButton_target->setIconSize(QSize(100, 100));
    //up
    ui->pushButton_up->setIcon(QIcon(":/image/up.png"));
    ui->pushButton_up->setIconSize(QSize(50, 50));
    //down
    ui->pushButton_down->setIcon(QIcon(":/image/down.png"));
    ui->pushButton_down->setIconSize(QSize(50, 50));
    //left
    ui->pushButton_left->setIcon(QIcon(":/image/left.png"));
    ui->pushButton_left->setIconSize(QSize(50, 50));
    //right
    ui->pushButton_right->setIcon(QIcon(":/image/right.png"));
    ui->pushButton_right->setIconSize(QSize(50, 50));

    //设置快捷键
    //直接通过按键的名字来设置
//    ui->pushButton_up->setShortcut(QKeySequence("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::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));
    //加上ctrl键
//    ui->pushButton_up->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_W));
//    ui->pushButton_down->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S));
//    ui->pushButton_left->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_A));
//    ui->pushButton_right->setShortcut(QKeySequence(Qt::CTRL + 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()
{
    //获取terget的位置
    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()
{
    //获取terget的位置
    QRect rect = ui->pushButton_target->geometry();
    //基于上次位置,设置新位置
    ui->pushButton_target->setGeometry(rect.x(), rect.y() + 5, rect.width(), rect.height());
}

void Widget::on_pushButton_left_clicked()
{
    //获取terget的位置
    QRect rect = ui->pushButton_target->geometry();
    //基于上次位置,设置新位置
    ui->pushButton_target->setGeometry(rect.x() - 5, rect.y(), rect.width(), rect.height());
}

void Widget::on_pushButton_right_clicked()
{
    //获取terget的位置
    QRect rect = ui->pushButton_target->geometry();
    //基于上次位置,设置新位置
    ui->pushButton_target->setGeometry(rect.x() + 5, rect.y(), rect.width(), rect.height());
}

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

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

相关文章

Vue中下载内容为word文档

1.使用 html-docx-js:这是一个将 HTML 转换为 Word 文档的库。 2. 利用 Blob 和 FileSaver.js:创建并下载生成的 Word 文档。 在 Vue.js 中实现步骤如下: 1. npm 安装 html-docx-js 和 file-saver npm install html-docx-js npm install file-saver2.…

CAS-ViT:面向高效移动应用的卷积加性自注意力视觉Transformer

摘要 https://arxiv.org/pdf/2408.03703 视觉转换器(Vision Transformers,ViTs)以其标记混合器强大的全局上下文能力,在神经网络领域取得了革命性的进展。然而,尽管以往的工作已做出相当大的努力,但成对标…

终于来了!中国首个接入大模型的Linux开源操作系统正式发布!

在AI飞速发展的今天,谁不希望自己的电脑里住着一个AI助手,我们动动嘴皮子就能指挥电脑干活,省时省力?但是Windows Copilot锁了区,很多用户只能“望洋兴叹”。 而现在,国产站出来了,说我们也有A…

Python常用的模块

一、logging模块 一)日志级别 critical50 error40 waring30 info20 debug10 notset0 二)默认的日志级别是waring(30),默认的输出目标是终端 logging输出的目标有两种:1、终端;2、文件 高于warn…

如何查看麒麟系统下的CPU信息

如何查看麒麟系统下的CPU信息 一、使用lscpu命令二、使用cat /proc/cpuinfo命令 💖The Begin💖点点关注,收藏不迷路💖 在麒麟(Kylin)Linux系统中,了解CPU的详细信息对于系统性能调优、故障诊断以…

转债违约,是实体经济高质量发展的一大步?

8月14日,岭南股份公告其发行的可转债无法按期兑付,出现实质违约。8月16日,证券时报发表了一篇“雄文”《国企可转债的刚兑信仰该放下了》,引爆了舆论。 文章内容总结下,就是对投资者一顿批评教育,批评投资者…

leetcode-461. 汉明距离

题目描述 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y,计算并返回它们之间的汉明距离。 示例 1: 输入:x 1, y 4 输出:2 解释: 1 (0 0 0 1) 4 (0 1 0 0) …

Spring7中事务传播机制形象图解

一、Spring的7种事务传播机制 Spring事务传播机制是指在多个事务方法相互调用的情况下,事务如何在方法之间进行传播和管理的机制。通过事务传播机制,可以控制事务的范围和行为,保证多个事务方法的一致性和完整性。Spring提供了七种事务传播行…

Linux系统挂载U盘方法

第一步: 插入U盘,如果能够识别出U盘,则会**出一些信息 第二步: 查看U盘系统分配给U盘的设备名;输入如下命令进行查看: 使用fdisk -l命令查看一下U盘是否有被识别到,及识别的U盘是在哪个位置 …

8.15 day bug

bug1 一个按钮折腾了 两个小时 一直点第一个按钮,然后进去后发现根本没有课程,需要创建workspace,然后各种问题,还是没把课程启动起来,然后去看gitpod使用文档,搞懂工作区到底是怎么回事,一通操…

实用篇| 如何快速搭建“二手系统”的数据库

对于一些程序员最痛苦的是接手一些“二手系统“, 由于年久失修, 加上裁员离职,系统文档不完善等原因, 只留下服务器配置和代码。 接手人,只能对着这些仅存的代码和服务器硬刚, 对服务器硬刚的第二步&#x…

Golang | Leetcode Golang题解之第343题整数拆分

题目&#xff1a; 题解&#xff1a; func integerBreak(n int) int {if n < 3 {return n - 1}quotient : n / 3remainder : n % 3if remainder 0 {return int(math.Pow(3, float64(quotient)))} else if remainder 1 {return int(math.Pow(3, float64(quotient - 1))) * …

学习日志--NAT(Network Address Translation)网络地址转换

目录 一、什么是NAT网络地址转换 二、配置并检查实验环境 三、NAT实现原理 四、NAT实现静态配置一对一 五、NAT实现动态配置一对一 六、PAT端口地址转换一对多 七、NAT优化easyIP的问题 八、NAT网络地址转换PAT多对多转换&#xff08;特殊情况&#xff09; 九、NAT---…

【Harmony OS 4.0】从零开始,快速上手

2019年8月份Harmony OS 1.0&#xff0c; 2020年9月份Harmony OS 2.0 2022年7月份Harmony OS 3.0 2023年3月份Harmony OS 4.0&#xff0c;不兼容 android app 1. 快速上手 1.1 下载并安装 DevEco Studio 1.2 创建项目并初始化 项目 build init 时报错&#xff1a;request to h…

产业经济大脑建设方案(三)

为了加速产业经济的智能化转型&#xff0c;我们建议建立一个全面集成的产业经济大脑系统&#xff0c;该系统结合人工智能、大数据分析和云计算技术&#xff0c;构建数据驱动的决策支持平台。该平台将实时采集和处理产业链各环节的数据&#xff0c;利用智能算法进行深度分析和预…

【C++】C++11新增特性

目录 C11简介&#xff1a; 1、统一的列表初始化&#xff1a; std::initializer_list 2、自动类型推导&#xff1a; auto&#xff1a; decltype&#xff1a; 3、final 和 override final&#xff1a; override&#xff1a; 4、默认成员函数控制&#xff1a; 显示缺省…

网络安全简介(入门篇)

目录 前言 一、什么是网络安全&#xff1f; 二、网络安全的重要性 1、保护数据安全和隐私 2、防止服务中断和数据丢失 3、防止经济损失和法律责任 4、维护公共安全和国家安全 5、提升技术发展和创新 三、网络安全等级保护 1、第一级&#xff08;自主保护级&#xff0…

Java基础-Windows开发环境下Java8和OpenJDK17的自由切换

一、Java语言介绍 Java是一种广泛使用的编程语言和计算平台&#xff0c;具有平台无关性、稳定性和强大的生态系统。随着时间的推移&#xff0c;Java不断演进&#xff0c;推出了多个版本&#xff0c;每个版本都带来了新的功能和性能改进。 1. Java主流版本 Java的主流版本包括…

【排序篇】快速排序的非递归实现与归并排序的实现

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 文章目录 1 快速排序非递归2. 归并排序3.排序算法复杂度及稳定性分析 1 快速排序非递归 利…

Leetcode面试经典150题-14.最长公共前缀

解法都在代码里&#xff0c;不懂就留言或者私信 这个题比较简单&#xff0c;基本上是笔试的第一第二题 class Solution {/**最长公共前缀这种问题个人感觉最重要的是剪枝我理解可以先按照字符串的长度排个序&#xff0c;然后把第一个字符串的长度作为暂时的最长公共前缀的长度…