[Qt 基础-01] QPushButton
QPushButton
简介
QPushButton是一个很常用的一个按钮控件,主要用于创建一个可按压的按键。它显示了一 个文本和一个图标。另外,你也可以在创建时,指定一个快捷键。
基本用法
1. 创建
QPushButton主要有两种创建方法,一种是直接在QtCreator上进行拖拽添加,另外一种是用代码创建。
用代码创建如下:
QPushButton *button = new QPushButton("Download", this);
你也可以在创建的时候这样写:
QPushButton *button = new QPushButton("&Download", this);
这样,你就指定了一个快捷键,用于按下这个按钮,具体的规则为:
在"&"后面的那个字母就是你的快捷键,而且快捷键的组合方式为Alt + D。所以如果你是这样写
QPushButton *button = new QPushButton("D&ownload", this);
你的快捷键就是:Alt + o
2. 设置信息
你也可以自己手动的去设置信息,包括按钮上面的字,按钮上的图标。
调用setText来设置按钮上的文字:
button->setText("下载");
调用setIcon来设置按钮上的图标
QIcon icon("D:/icon.png");
button->setIcon(icon);
autoRepeat
属性autoRepeat,当这个属性为true的时候,你鼠标左键按下键盘之后,会持续性的释放pressed、released和clicked信号,直到你松下鼠标左键为止;
ui->pushButton_3->setAutoRepeat(true);
connect(ui->pushButton_3, &QPushButton::pressed, [] () {
qDebug() << "pressed";
});
connect(ui->pushButton_3, &QPushButton::clicked, [] () {
qDebug() << "clicked";
});
connect(ui->pushButton_3, &QPushButton::released, [] () {
qDebug() << "released";
});
在按下之后,会得到如下效果:

autoRepeatDelay
这个属性用来设置前面的autoRepeat这个在自动重复前的延迟,也就是说在按下之后,等待这个设置的延迟之后,才会开启自动重复。
ui->pushButton_3->setAutoRepeatDelay(2000);
效果如下:

autoRepeatInterval
这个属性是设置每个重复信号发射之间的间隔,
ui->pushButton_3->setAutoRepeatInterval(2000);
效果如下:

信号的连接
主要的信号主要是鼠标点击按钮时,发射的信号,主要是click信号,你可以连接这两个信号,来实现自己的功能。
connect(button, SIGNAL(click()), this, SLOT(doSomething()));
样式表设计
我们可以设计样式表,来达到美化按钮的目的。
QPushButton
{
background-color: rgb(111, 221, 255);
font: 8px "Microsoft YaHei";
color: black;
}
另外如果要设置图片背景给QPushButton,请移步Qt Qss 设置QPushButton图标和背景
同时你也可以根据按钮的伪状态来设置对应的样式表:
/*按下的状态*/
QPushButton:pressed
{
/*要设计的样式*/
}
/*悬浮的状态*/
QPushButton:hover
{
/*要设计的样式*/
}
最终的代码和效果如下:
QPushButton *button = new QPushButton("D&ownload", this);
QIcon icon("D:/icon.png");
button->setIcon(icon);
connect(button, SIGNAL(click()), [] () {
QMessageBox::information(nullptr, "提示", "按钮按下");
});
button->setStyleSheet("QPushButton{\n background-color: rgb(111, 221, 255);\n font: 14px \"Microsoft YaHei\";\n color: black;\n}");

[Qt 基础-01] QPushButton的更多相关文章
- 基于C/S架构的3D对战网络游戏C++框架_04客户端详细设计与OpenGL、Qt基础
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- javascript基础01
javascript基础01 Javascript能做些什么? 给予页面灵魂,让页面可以动起来,包括动态的数据,动态的标签,动态的样式等等. 如实现到轮播图.拖拽.放大镜等,而动态的数据就好比不像没有 ...
- Androd核心基础01
Androd核心基础01包含的主要内容如下 Android版本简介 Android体系结构 JVM和DVM的区别 常见adb命令操作 Android工程目录结构 点击事件的四种形式 电话拨号器Demo ...
- java基础学习05(面向对象基础01)
面向对象基础01 1.理解面向对象的概念 2.掌握类与对象的概念3.掌握类的封装性4.掌握类构造方法的使用 实现的目标 1.类与对象的关系.定义.使用 2.对象的创建格式,可以创建多个对象3.对象的内 ...
- Linux基础01 学会使用命令帮助
Linux基础01 学会使用命令帮助 概述 在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档:linux系统内置的帮助文档很详细,通常能解决我们的问题, ...
- 可满足性模块理论(SMT)基础 - 01 - 自动机和斯皮尔伯格算术
可满足性模块理论(SMT)基础 - 01 - 自动机和斯皮尔伯格算术 前言 如果,我们只给出一个数学问题的(比如一道数独题)约束条件,是否有程序可以自动求出一个解? 可满足性模理论(SMT - Sat ...
- LibreOJ 2003. 「SDOI2017」新生舞会 基础01分数规划 最大权匹配
#2003. 「SDOI2017」新生舞会 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- java基础 01
java基础01 1. /** * JDK: (Java Development ToolKit) java开发工具包.JDK是整个java的核心! * 包括了java运行环境 JRE(Java Ru ...
- 081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字
081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字 本文知识点:new关键字 说明:因为时间紧张,本人写博客过程中只是 ...
- 080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则
080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则 本文知识点:单一职责原则 说明:因为时间紧张,本人写博客过程中只是 ...
随机推荐
- shell内置字符串替换
shell变量赋值语法: 使用规则 解释单引号 所见即所得,即输出时会将单引号内的所有內容都原样输出,或者描述为单引号里面看到的是什么就会输出什么,这称为强引用双引号 (默认) 输出双引号内的所有内容 ...
- Qt/C++开发经验小技巧296-300
使用QDir::setCurrent设置当前目录后,会影响程序中的所有相对目录的执行,导致可能的意外发生,一般相对目录都默认是可执行文件所在目录,所以如果程序中为了特殊处理临时调用了QDir::set ...
- Qt音视频开发40-ffmpeg采集桌面并录制
一.前言 之前用ffmpeg打通了各种视频文件和视频流以及本地摄像头设备的采集,近期有个客户需求要求将整个桌面屏幕采集下来,并可以录制保存成MP4文件,以前也遇到过类似的需求,由于没有搞过,也没有精力 ...
- Qt编写物联网管理平台37-逻辑设计
一.前言 本系统的逻辑设计是个人认为做过的系统中最好的,一个系统支持多个通信端口,每个通信端口都可选不同的通信协议,一个通信端口可以接255个控制器,相当于主设备,一个控制器可以接255个探测器,相当 ...
- 记一次简单的存储过程和Pivot行转列
首先我很讨厌写存储过程,其次我很讨厌 没办法,主要是需要进行 行转列,项目经理说可以用Pivot.我不是很精通sql,但是我会百度呀~ pivot需要有确定的列名.那我这个项目里面没办法确定,最后问了 ...
- ConcurrentHashMap源码分析-JDK18
前言 ConcurrentHashMap是一个线程安全的HashMap,主要用于解决HashMap中并发问题. 在ConcurrentHashMap之前,也有线程安全的HashMap,比如HashTa ...
- 【饮食与健康】【AIGC创作】表观生理年龄逆转指北
一.引言 我们都知道,岁月不饶人,但是谁又不想在岁月的长河中留下青春的容颜呢?在这个人人都追求健康和美丽的时代,我们的生活节奏却愈发紧张,高压的工作和不规律的作息让我们的身体时刻处于亚健康状态.这时候 ...
- JAVA根据集合中属性判断是否包含元素
boolean isContain = list.stream().anyMatch(item -> item.getKey().equals(key));
- Solution Set -「OurOJ Contest #2587」浅写
\(\mathscr A\sim\)「OurOJ #47030」_ Link & Submission & Tags:「A.DP-计数 DP」「A.数学-Stirling 数/反演 ...
- SpringBoot(四) - 整合Mybatis,逆向工程,JPA,Mybatis-plus
1.SpringBoot整合MyBatis 1.1 application.yml # 数据源配置 spring: datasource: driver-class-name: com.mysql.c ...