Qt--自定义控件

news2024/9/21 18:58:00

写在前面

Qt中提供了应用在各种场景的控件,使开发人员在实际工作中选择。但有些特定的场合中这些控件并不满足需要时,Qt允许使用自定义的控件。

例:我们在工作中有这样一种需求,点击按钮会根据一些其他状态来显示不同的图片,这时Qt提供的QPushButton就无法满足这种需求,这时我们就可以自定义一个继承自QPushButton的按钮类,在该类中重写按下的事件函数以实现根据其他状态显示不同图片的需求。

又或是,在一个项目中,频繁组合使用一些Qt提供的控件的组合(例SpinBox和HorizontalSlider),每次添加都需要添加维护两个控件。这时可以自定义一个控件类,在该类中管理维护SpinBox和HorizontalSlider两个控件,方便后续使用。

创建自定义控件

这里以 SpinBox和HorizontalSlider 组合的自定义控件为例,介绍常规的自定义控件的开发步骤。

假设这里有一个Widget项目,作为工作项目。右键项目 -》添加新文件, 选择Qt -》Qt设计器界面类:
新建自定义ui类
选择自定义控件的父类:
模板

输入自定义控件类的名称:
自定义控件名称

最后会给出添加的文件:
添加文件到项目中

添加完成后可以看到.pro文件中自动添加了自定义类的.h .cpp以及ui文件,另外在界面文件中,也多了一个smallwidget.ui文件:
pro文件

界面文件

然后就可以在smallwidget.ui文件中设计我们的自定义控件了。

这里在smallwidget.ui中放了一个SpinBox和一个HorizontalSlider:
自定义控件

然后实现双向的连接:

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

    //连接
    connect(ui->spinBox, SIGNAL(valueChanged(int)), ui->horizontalSlider, SLOT(setValue(int)));

    connect(ui->horizontalSlider, SIGNAL(valueChanged(int)), ui->spinBox, SLOT(setValue(int)));
}

到这里,一个简单的自定义控件就设计完成了。

使用自定义控件

既然自定义控件设计完成了,如何在上面的Widget项目中使用呢?

这里在widget.ui中添加一个widget控件(因为我们的自定义控件的父类就是QWidget):
项目中添加widget控件

选中widget控件,右键 -》提升为:
提升为
然后在弹出的界面中输入要提升到的自定义控件的类名即可:
提升为自定义控件
在该窗口中,若勾选全局包含,那后面再提升时,会显示已经被使用过的自定义控件类,方便后续使用。如窗口上方显示的SmallWidget类,这里点击选中,然后提升即可。

这样就使设置完成了,完成后虽然ui界面还是一个空的widget控件,但右边的类已经改变为SmallWidget了:
提升后
运行后查看效果:
自定义控件效果
可以看到确实是我们设计的自定义控件的效果。即使用一个控件类SmallWidget管理SpinBox和HorizontalSlider两个控件。

后续也可按需调整SpinBox和HorizontalSlider的样式,取值范围等。

总结

本文简单介绍了如何创建以及使用自定义控件,当Qt提供的控件不满足项目需求时,应该考虑使用自定义控件。

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

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

相关文章

在外远程登录局域网下的象过河ERP管理系统,无需公网IP

文章目录 概述1.查看象过河服务端端口2.内网穿透3. 异地公网连接4. 固定公网地址4.1 保留一个固定TCP地址4.2 配置固定TCP地址 5. 使用固定地址连接 转发自CSDN远程穿透的文章:公网远程访问公司内网象过河ERP系统「内网穿透」 概述 ERP系统对于企业来说重要性不言而…

3D可视化智慧档案馆一体建设平台设计的主要依据

1、《中华人民共和国档案法》 2、《中华人民共和国档案实施办法》 3、GB/T 9386-1988《计算机软件测试文件编制规范》 4、GB/T 15532-1995《计算机软件单元测试规范》 5、GB/T 30961-2014 嵌入式软件质量度量 6、GB2421-89 电工电子产品基本环境试验规程 7、GB16796-2009…

【1377. T 秒后青蛙的位置】

来源:力扣(LeetCode) 描述: 给你一棵由 n 个顶点组成的无向树,顶点编号从 1 到 n。青蛙从 顶点 1 开始起跳。规则如下: 在一秒内,青蛙从它所在的当前顶点跳到另一个 未访问 过的顶点&#xf…

网终安全技术(刘化君)课后被略的答案

目录 8.HTTP客户机与Wb服务器通信通常会泄露哪些信息? 9.在TCP连接建立的3次握手阶段,攻击者为什么可以成功实施SYN Flood攻击?在实际中,如何防范此类攻击? 常用的网络漏洞扫描技术有哪几种?试举例说明。…

Visual Studio 2010环境新建C工程项目

新建C工程项目 文章目录 新建C工程项目前言1、新建空项目2、编写程序2.1 Hello World2.1 执行.exe文件 3、总结 前言 学习C语言使用的编译器比较多,常见的有VC6.0、Dev-C、Visual Studio、CodeBlocks等环境软件。 Visual Studio和CodeBlocks的功能就稍微强大很多&a…

MySQL_5 有丶牛逼的查询语句

目录 一、分组查询 1.基本语法 : 2.代码演示 : 二、分页查询 1.基本语法 : 2.代码演示 : 三、多表查询 1.定义 : 2.语法 : 3.演示 : 四、嵌套查询 1.定义 : 2.单行子查询 : 1 特点 2 演示 3.多行子查询 : 1 特点 2 演示 4.临时表 : 1 定义 2 演示 5.多列子查询 …

Emacs之实时渲染markdown(九十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

Web安全常见攻击

前言 本篇主要简单介绍在 Web 领域几种常见的攻击手段。 1. Cross Site Script(XSS跨站脚本攻击) 首先插播一句,为毛叫 XSS,缩写明显是 CSS 啊?没错,为了防止与我们熟悉的 CSS(Cascading Style Sheets&am…

类ChatGPT的各种语言大模型LLM开源Github模型集合​

作为开发人员,面对堪称科技奇点爆发的ChatGPT,我们如何应对。当然是努力跟进,虽然ChatGPT不开源,但是有诸多不输ChatGPT的各类语言大模型LLM有分享。我们筛选出其中影响力较大的各个开源Github仓库,收录到 类ChatGPT的…

由浅入深Dubbo网络通信协议大全

目录 1 网络通信协议1.1 dubbo协议1.2 rmi协议1.3 hessian协议1.4 http协议1.5 webservice协议1.6 thrift协议1.7 rest协议1.8 grpc协议1.9 memcached协议1.10 redis协议 2 序列化实现剖析 1 网络通信协议 在之前的内容中,我们讲解了消费者端服务发现与提供者端服务…

局部最小值问题

局部最小值问题 自写&#xff1a; // arr 相邻的数不相等&#xff01; 返回一个局部最小的下标public static int oneMinIndex(int[] arr) {if(arr null || arr.length 0) {return -1;}if(arr.length 1) {return 0;}int L 0;int R arr.length - 1;if(arr[L] < arr[L 1…

C++判断大端小端

C判断大端小端 1. 基础知识 大端小端其实表示的是数据在存储器中的存放顺序。 大端模式&#xff1a;数据的高字节存放在内存的低地址中&#xff0c;而低字节则存放在高地址中。地址由小到大增加&#xff0c;数据则从高位向低位存放&#xff0c;这种存放方式符合人类的正常思维…

Hadoop/HbBase/Hive/HDFS/MapReduce都是什么?

目录 一图胜万言&#xff01;&#xff01; 解释说明 1. hadoop 2. hive 3. hbase 总结 一图胜万言&#xff01;&#xff01; 解释说明 1. hadoop 它是一个分布式计算分布式文件系统&#xff0c;前者其实就是 MapReduce&#xff0c;后者是 HDFS 。后者可以独立运行&…

特瑞仕|关于无线射频

无线射频&#xff08;Radio Frequency, RF&#xff09;是指在一定频率范围内&#xff0c;通过无线电波进行通信和传输信息的技术。随着移动通信、物联网、智能家居等领域的不断发展&#xff0c;无线射频技术已经成为现代社会中不可或缺的一部分。本文将从以下几个方面对无线射频…

打印机无法扫描的原因及解决方法

在家庭和办公环境中&#xff0c;打印机已成为不可或缺的设备。它不仅可以打印文件&#xff0c;还可以扫描文档并将它们转换为数字数据。但有时&#xff0c;打印机可能无法扫描文档或图片。以下是可能导致这些问题的原因和解决方法。 出现打印机无法扫描的原因&#xff1a; 1.…

web基础和http协议

文章目录 一、web基础1.1dns的概念1.2网页的概念1.3HTML的概念1.4静态网页1.5动态网络 二、HTTP协议2.1什么是HTTP协议2.2HTTP的版本协议2.3HTTP的请求方法2.4HTTP的状态码2.5HTTP 请求流程分析 一、web基础 1.1dns的概念 dns用作域名解析&#xff0c;有正向解析和反向解析两…

protobuf全局环境搭建

一、安装npm 1.测试是否安装npm 如果未出现npm 不是内部或外部命令&#xff0c;则先安装npm npm是NodeJs的包管理器&#xff08;Node Package Manager&#xff09; 所以我们要安装npm&#xff0c;其实就是安装NodeJs&#xff0c;进入NodeJs官网 下载完成之后&#xff0c;安装…

7.性能测试

目录 一、常见的性能问题 二、为啥要进行性能测试&#xff1f; 三、确定性能测试的需求&#xff08;性能指标&#xff0c;量化&#xff09; 1.关键性能指标分析 2.关键业务的分析 四、不同维度衡量系统的性能 1.研发人员 2.系统运维人员 3.用户 4.性能测试人员 五、性…

力扣 695. 岛屿的最大面积

一、题目描述 给你一个大小为 m x n 的二进制矩阵 grid。 岛屿是由一些相邻的 1&#xff08;代表土地&#xff09;构成的组合&#xff0c;这里的相邻要求两个 1 必须在水平或者竖直的四个方向上相邻。你可以假设 grid 的四个边缘都被 0&#xff08;代表水&#xff09;包围着。…

论文分享 A ConvNet for the 2020s

摘要 视觉识别的“咆哮的 20 年代”始于 Vision Transformers (ViTs) 的引入&#xff0c;它迅速取代了 ConvNets&#xff0c;成为最先进的图像分类模型。另一方面&#xff0c;vanilla ViT 在应用于对象检测和语义分割等一般计算机视觉任务时面临困难。正是层次化的 Transforme…