【快速上手QT】08-Buttons组件

我们差不多把QT的基础部分讲差不多了。接下来我们把一些组件介绍一下,最后再开始QT的进阶部分,需要先把基础打牢嘛,也当是练习练习怎么使用QT助手了。

就按照QtDesigner里的顺序,今天我们讲一讲Buttons,也就是按钮组件。

因为这个系列的第二篇,学习使用QT助手的那一篇里我是以QPushButton为例的,并且QPushButton也是最常用的,相信大家也都懂的怎么用了,因此我们跳过第一个组件,直接开始第二个组件QToolButton。

QToolButton

用QT助手去查阅组件,我们首先要注意的点就是我红框框起来的地方。

第一个是我们要使用这个组件需要包含的头文件。

第二个是我们在配置文件里需要有的。

第三个是它这个组件继承于谁,很多基础的方法我们是需要从它祖上去查的。

那么我们今天就不查组件祖上了,我们就只看这些组件的特性。

我们看看他的公共函数。之前的文章提到过,以set开头的函数都是设置组件用的,因此我们从上面四个函数入手。

setArrowType

从它的名字就可以猜个大概出来,如果看得懂英文的小伙伴也可以直接从QT助手中知道这个函数是做什么的。

就是设置QToolButton的箭头图标的。

我们先初始化一个普普通通的QToolButton出来。

#include "Zhetu.h"
#include <QToolButton>

Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){
	this->setFixedSize(650, 400);
	
	QToolButton* tb = new QToolButton(this);
	tb->setFixedSize(100, 50);
}

Zhetu::~Zhetu()
{}

看得出来这个QToolButton和我们之前用的按钮不一样,这个按钮按下去没有任何反应。

我们再使用这个函数看看有什么不一样的。

我们点击QT助手里的超链接跳转到参数类型里寻找可以填入的参数。

看的出来默认是第一个,也就是无箭头,我们随便选一个看看效果。

所以看的出来这个函数是做什么用的了,但是好像并没有什么卵用,按钮还是点击没有任何效果。

我们接着看下一个函数。

setAutoRaise

根据名字我们得知,这个函数设置我们的QToolButton是否自动提升,参数是一个布尔值,默认是false,那么我们就给它设置为true看看什么效果。

边框消失了。。。消失了。。。所以这玩意有啥用。。。

setMenu

Menu我们都懂,就是菜单,我们之前接触菜单是在QMainWindow中的菜单栏里,而这个QToolButton可以设置菜单,至此我们就算明了这个组件到底是做什么用的了,就是给我们提供一个移动菜单的载体,而不必非要在菜单栏里才可以得到菜单了,虽然我觉得挺鸡肋的

我们就按照添加菜单到菜单栏的步骤给QToolButton添加一个菜单。

#include "Zhetu.h"
#include <QToolButton>


Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){
	this->setFixedSize(650, 400);
	
	QToolButton* tb = new QToolButton(this);
	tb->setFixedSize(100, 50);
	QMenu* m = new QMenu(this);
	m->addAction("one");
	m->addAction("two");
	tb->setMenu(m);
}

Zhetu::~Zhetu()
{}

看的出来QToolButton变了个样,可以看得出是有内容的,但是点击却还是没有反应。

这时候需要请出我们最后一个函数了。

setPopupMode

直译是设置弹出模式,不难想到,就是设置菜单的弹出方式,默认是DelayedPopup,也就是延时弹出,所以我们之前点击按钮一样是没有反应的。

一共是三个可以选的参数,看不懂没关系,我们翻译一下。

可以看的出来,默认是需要长按QToolButton才会弹出菜单。

而第三个选项是点击就立刻弹出菜单,这个才是我们最需要使用的。

QRadioButton&QCheckButton

这俩按钮我们一起将,因为都比较简单,而且功能是差不多的。

在QtDesigner中我们就能直观地看出它们都是拿来勾选用的。

我们直接使用QRadioButton演示一下,因为它除了构造函数之外没有别的什么函数了。因此我们使用它还是得靠它的父类的函数。

#include "Zhetu.h"
#include <QRadioButton>
#include <qdebug.h>

Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){
	this->setFixedSize(650, 400);
	
	QRadioButton* rb = new QRadioButton("rb", this);
	connect(rb, &QRadioButton::clicked, []() {
		qDebug() << "click!";
		});
}

Zhetu::~Zhetu()
{}

像上面这样,我们就成功的通过信号(继承于父类的信号)与槽来获取到是否选中了这个QRadioButton了。

QCheckBox其实也一样,不过它比QRadioButton相比多了点函数,我们一样是直接演示使用。

#include "Zhetu.h"
#include <QCheckBox> 
#include <qdebug.h>

Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){
	this->setFixedSize(650, 400);
	
	QCheckBox* cb = new QCheckBox("cb", this);
	cb->setCheckState(Qt::PartiallyChecked);
	connect(cb, &QCheckBox::clicked, [&]() {
		qDebug() << "click!";
		});
}

Zhetu::~Zhetu()
{}

上面演示了通过setCheckState,我们可以使得这个选择框中出现了除了不选和选择的第三种情况。

这时候我们再请出剩下一个set函数。

这个函数使得我们的选择框一共是有三种状态,不选,半选,选择。

关于选择的这两个按钮就讲这么多,还是很简单的。

QCommandLinkButton

看的出它的函数也不多。

 就一个setDescription,我们先等等,直接构造一个QCommandLinkButton出来看看效果。

#include "Zhetu.h"
#include <QCommandLinkButton>
#include <qdebug.h>

Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){
	this->setFixedSize(650, 400);

	QCommandLinkButton* clb = new QCommandLinkButton("CommandLinkButton", "Description", this);
	clb->setFixedSize(200,100);
}

Zhetu::~Zhetu()
{}

看的出来这个按钮有两个文本,还附带一个小箭头。

根据英文的翻译,可以知道setDescription就是用来设置按钮中第二行比较小的文本的,我们就不另外演示了。

我们直接翻到QT助手中QCommandLinkButton的介绍。

看不懂我们就翻译一下。

所以我们就知道了,这个按钮就是等于普通按钮,只不过它自带了一个箭头图标。

QDialogButtonBox

剩下最后一个button了,其实从QtDesigner中我们就可以知道这个组件是做什么用的了。

没错,就是等于一次性给我们两个按钮。这和我们的QDialog对话框很像。

虽然它叫button,但是它继承的却是QWidget。

它的函数跟QDialog的使用也大差不差,涉及的函数也比较多,这里就不介绍了,可以返回上一篇文章再回顾一下QDialog。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux命令深入学习——列出帮助手册,开机关机

linux中有多种方法查看一个不熟悉命令的详细信息&#xff0c;如 ls --help&#xff0c;help ls&#xff0c;man ls&#xff0c;info ls 在linux系统中可以使用命令进行开关机以及相关基础操作 同时在进行写入操作时&#xff0c;可以使用快捷键进行操作

微信小程序(一)

WebView app.是全局配置&#xff0c;app.json是全局配置文件&#xff0c;在页面的.json配置文件中的配置会覆盖我们全局的配置 快捷键&#xff1a; .box 敲回车 ----- <view class"box"></view> .row*8 敲回车&#xff1a; .row{$}*8 敲回车 案例1&…

深入浅出Java泛型

公众号「稀有猿诉」 原文链接 深入浅出Java泛型 温故而知新&#xff0c;可以为师矣&#xff01; 在前面的一篇文章中学习了Kotlin的泛型知识&#xff0c;但总感觉还不够深入&#xff0c;因为一些深入的话题和高级的特性并未有讲清楚。但在继续深入之前还是有必要重温一下…

吴恩达深度学习笔记:神经网络的编程基础2.5-2.8

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第二周&#xff1a;神经网络的编程基础 (Basics of Neural Network programming)2.5 导数&#xff08;Derivatives&#xff09; 第一门课&#xff1a;神经网络和深度学习 (Neural Networks an…

04-微服务 面试题

目录 1.Spring Cloud 常见的组件有哪些? 2.服务注册和发现是什么意思?(Spring Cloud 如何实现服务注册发现) 3.你们项目负载均衡如何实现的 ? 4.什么是服务雪崩,怎么解决这个问题? 5.你们服务是怎么监控的? 6.微服务限流(漏桶算法、令牌桶算法) 7.解释一下CAP…

scrapy的基本使用介绍

创建项目 ### 1. 创建虚拟环境 conda create -n spiderScrapy python3.9 ### 2. 安装scrapy pip install scrapy2.8.0 -i https://pypi.tuna.tsinghua.edu.cn/simple### 3. 生成一个框架 scrapy startproject my_spider### 4. 生成项目 scrapy genspider baidu https://www.b…

RabbitMQ - 02 - 基本消息模型

目录 部署demo项目 什么是基本消息模型 实现基本消息模型 部署demo项目 首先配置好一个mq的练习demo,并配置好相关依赖 链接&#xff1a;https://pan.baidu.com/s/1oXAqgoz9Y_5V7YxC_rLa-Q?pwdv2sg 提取码&#xff1a;v2sg 如图 父xml文件已经配置好了 AMQP依赖了 什么…

重学SpringBoot3-集成Thymeleaf

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 重学SpringBoot3-集成Thymeleaf 1. 添加Thymeleaf依赖2. 配置Thymeleaf属性&#xff08;可选&#xff09;3. 创建Thymeleaf模板4. 创建一个Controller5. 运行应用并访问页面Thymeleaf基本语法小技巧 国际化步骤 …

Cassandra 安装部署

文章目录 一、概述1.官方文档2. 克隆服务器3.安装准备3.1.安装 JDK 113.2.安装 Python3.3.下载文件 二、安装部署1.配置 Cassandra2.启动 Cassandra3.关闭Cassandra4.查看状态5.客户端连接服务器6.服务运行脚本 开源中间件 # Cassandrahttps://iothub.org.cn/docs/middleware/…

15. UE5 RPG获取GE应用的回调,并根据Tag设置数据显示到窗口

在上一篇介绍了对标签如何在项目中设置&#xff0c;这一篇先讲解一下如何在GE里面使用GameplayTag标签。 之前我在第十一章节中 11. UE5 RPG使用GameplayEffect修改角色属性&#xff08;二&#xff09;介绍了一些GE的属性&#xff0c;在UE 5.3版本中&#xff0c;修改的配置方式…

SpringBoot中MD5使用

SpringBoot中MD5使用 新建md5类 public final class MD5 {public static String encrypt(String strSrc) {try {char[] hexChars {0, 1, 2, 3, 4, 5, 6, 7, 8,9, a, b, c, d, e, f};byte[] bytes strSrc.getBytes();MessageDigest md MessageDigest.getInstance("MD5…

云游戏发行是什么?云游戏发行的演进历程

云游戏发行是一系列基于云游戏技术的游戏发行策略或行为&#xff0c;融合云试玩、云微端、可玩广告、跨端移植等技术&#xff0c;从而在传统游戏发行生态的基础上实现更为卓越的发行效果。 云游戏发行出现的原因 近年来&#xff0c;游戏市场出现负增长。其原因一方面在于游戏版…

高颜值抓包工具Charles,实现Mac和IOS端抓取https请求

Hi&#xff0c;大家好。在进行测试的过程中&#xff0c;不可避免的会有程序报错&#xff0c;为了能更快修复掉Bug&#xff0c;我们作为测试人员需要给开发人员提供更准确的报错信息或者接口地址&#xff0c;这个时候就需要用到我们的抓包工具。 常见的抓包工具有Fiddler、Char…

LeetCode_Java_二叉搜索树系列(题目+思路+代码)

目录 108.将有序数组转化为二叉搜索树 109.有序链表转换二叉搜索树 876.链表的中间节点 108.将有序数组转化为二叉搜索树 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡二叉搜索树。 示例 1&#xff1a; 输入&#xf…

vscode使用svn

网上这种文章很多&#xff0c;但很多都实现不了&#xff0c;自己亲测安装有效的过程记录下来&#xff0c;分享给大家。 第一步&#xff1a;去官网下载svn.安装TortoiseSVN 下载地址 下载的地址&#xff1a; Apache Subversion Binary Packageshttps://subversion.apache.or…

OpenHarmony教程指南—ArkTS时钟

简单时钟 介绍 本示例通过使用ohos.display 接口以及Canvas组件来实现一个简单的时钟应用。 效果预览 使用说明 1.界面通过setInterval实现周期性实时刷新时间&#xff0c;使用Canvas绘制时钟&#xff0c;指针旋转角度通过计算得出。 例如&#xff1a;"2 * Math.PI /…

linux ,Windows部署

Linux部署 准备好虚拟机 连接好查看版本&#xff1a;java -version安装jdk 解压命令&#xff1a;tar -zxvf 加jdk的压缩文件名cd /etc 在编辑vim profile文件 在最底下写入&#xff1a; export JAVA_HOME/root/soft/jdk1.8.0_151&#xff08;跟自己的jdk保持一致&#xff0…

【网站项目】012医院住院管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

C++_异常

目录 1、异常的关键字 2、异常的写法 3、异常的使用规则 3.1 规则1 3.2 规则2 3.3 规则3 3.4 规则4 3.5 规则5 4、异常的重新抛出 5、异常的规范 5.1 C98的异常规范 5.2 C11的异常规范 6、C标准库的异常体系 7、异常的优缺点 结语 前言&#xff1a; C的异常…

Python从0到100(四):Python中的运算符介绍

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…