Qt6教程之三(3) QtWedget自定义控件

在之前的博客中,我们使用的控件都是Qt官方提供的,对于控件的特性也只能被动地接受,为了打破这种束缚,可以按照自己的想法来定义控件。

不过自定义控件必须遵守Qt官方的一套自定义控件规则,在规则之下我们就可以定义属于我们自己的控件啦!

QWidget是所有控件的基类,在自定义控件时均需要继承QWidget,然后通过重写覆盖原有方法或属性的方式来达到自定义控件的目的。

博主对于自定义控件的相关技术掌握程度略浅,这里针对自定义控件仅有两种方法,一种是基于Qt设计师的提供的控件提升方式,这种方式可以对多个控件进行组合,形成一个可复用的新控件;

另一种是纯代码实现方式,这种一般是继承Qt的原生控件,如push button,然后重写里面的对应函数来实现自己想要的功能,下面将对两种方式进行逐一演示。

话不多说,开始上代码:

一 基于Qt设计师的控件提升方式实现自定义控件

打开 Qt Qcreator ,新建一个应用程序工程,步骤如下:

 

项目名称叫WidgetTest ,创建路径根据自己的实际需求选择即可,点击下一步:

 

 

 

 

 

点击完成后,项目创建成功,

 

接下来添加一个UI页面作为自定义控件使用,下面我们采用水平进度条+LCD Number控价组合来作为一个自定义控件,步骤如下:

鼠标右键工程名称,选择添加新文件,

 

 

 

点击完成后,页面创建成功,

 

在左侧拖入两个控件: 水平进度条、LCD Number,布局如下:

然后点击左侧的编辑按钮,找到widget.ui 文件,双击打开,

 

找到widget控件,拖入UI编辑器,

选中拖入的widget控件,鼠标右键,选择提升为 ,

 

填入类名,选择添加,

 

然后勾选全局包含,点击提升,

 

此时可以看到,widget控件已被提升为 MyWidget,

 

 此时,运行程序后,我们之前在MyWidget.ui里面添加的控件就会在widget.ui的widget控件里面显示了,

 

接下来我们实现圆盘与进度条的相互联动功能(当拖动进度条时圆盘转动,当转动圆盘时进度条走动);

在MyWidget.h中新建四个属性函数,分别用于设置和获取圆盘与进度条的值,

MyWidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H#include <QWidget>namespace Ui {
class MyWidget;
}class MyWidget : public QWidget
{Q_OBJECTpublic:explicit MyWidget(QWidget *parent = nullptr);~MyWidget();//四个public 属性函数,分别用于设置和获取圆盘与进度条的值void setDialValue(int value);int getDialValue();void setSliderValue(int value);int getSliderValue();private:Ui::MyWidget *ui;
};#endif // MYWIDGET_H

MyWidget.cpp

#include "mywidget.h"
#include "ui_mywidget.h"MyWidget::MyWidget(QWidget *parent) :QWidget(parent),ui(new Ui::MyWidget)
{ui->setupUi(this);ui->dial->setMaximum(100);ui->dial->setMinimum(0);ui->dial->setPageStep(1);ui->horizontalScrollBar->setMaximum(100);ui->horizontalScrollBar->setMinimum(0);ui->horizontalScrollBar->setPageStep(1);connect(ui->dial,SIGNAL(valueChanged(int)),ui->horizontalScrollBar,SLOT(setValue(int)));connect(ui->horizontalScrollBar,SIGNAL(valueChanged(int)),ui->dial,SLOT(setValue(int)));}MyWidget::~MyWidget()
{delete ui;
}void MyWidget::setDialValue(int value)
{ui->dial->setValue(value);
}int MyWidget::getDialValue()
{return ui->dial->value();
}void MyWidget::setSliderValue(int value)
{ui->horizontalScrollBar->setValue(value);
}int MyWidget::getSliderValue()
{return ui->horizontalScrollBar->value();
}

接下来在主程序页面 widget.ui中添加两个按钮,用于设置和获取进度条的值,实现基础控价的属性设置功能;

 

 

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void setSliderValue();void getSliderValue();private:Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->setBT,SIGNAL(clicked()),this,SLOT(setSliderValue()));connect(ui->getBT,SIGNAL(clicked()),this,SLOT(getSliderValue()));}Widget::~Widget()
{delete ui;
}void Widget::setSliderValue()
{
ui->widget->setSliderValue(ui->setSP->value());
}void Widget::getSliderValue()
{ui->getSP->setValue(ui->widget->getSliderValue());
}

运行效果:

点击圆盘或进度条时二者可以联动,对进度条进行设置时,进度条能够走到指定的位置,也能获取当前进度条的实时位置;

 

二 纯代码实现方式实现自定义控件

这里有一个比较优秀的博客介绍,绘制漂亮的仪表盘,博客链接如下 :

Qt自定义控件之仪表盘的完整实现_qt 仪表盘_特立独行的猫a的博客-CSDN博客基于QT的仪表盘有很多种办法,比如使用QWT或Echart组件,或者基于QT的绘图功能绘制,或者基于美工提供的图片的基础上增加动态效果。然而搞明白QT自定义控件的绘图后,这种实现是最简单的。且定制度高,想要什么效果就可以自己绘制个。这里介绍下Qt自定义控件之仪表盘的完整实现。https://blog.csdn.net/yyz_1987/article/details/126958420?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-126958420-blog-78699591.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-126958420-blog-78699591.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=6绘制效果:

另外还有一个时钟的博客:

QT自定义控件--时钟_qt 时钟_贝勒里恩的博客-CSDN博客注:由于本人绘图刚刚开始学,所以还存在一些瑕疵,但是对于小白入门QT绘图还是很有帮助的。一、效果展示二、绘制原理详解1、绘制时钟盘首先我们需要确定绘制一个时钟表盘需要哪些参数,在此我把黑色圆环称为外部,白色圆称为内部。绘制时钟表盘我们需要确定时钟的中心(Center_pos)、外部表盘的半径(R_Edge)、内部表盘的半径(R_Inside)、圆心指针端点小圆半径(R_Pointer)...https://blog.csdn.net/Mr_robot_strange/article/details/104982649?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167791943916782427455342%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=167791943916782427455342&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-3-104982649-null-null.142^v73^pc_search_v2,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=QT%E8%87%AA%E5%AE%9A%E4%B9%89dial%E6%8E%A7%E4%BB%B6&spm=1018.2226.3001.4187 

 

上一篇博客:Qt6教程之三(2) QT使用qss_爱折腾的业余程序员的博客-CSDN博客本篇主要介绍Qt的QSS技术!https://blog.csdn.net/XiaoWang_csdn/article/details/129259335

下一篇博客:

Qt6教程之三(4) 页面控件布局_爱折腾的业余程序员的博客-CSDN博客主要介绍Qt的控件布局,包括单布局、嵌套布局的示例!https://blog.csdn.net/XiaoWang_csdn/article/details/129336845?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22129336845%22%2C%22source%22%3A%22XiaoWang_csdn%22%7D

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于TextRank+Seq2Seq+Pyqt5文章摘要标题关键词辅助生成系统(含全部python工程源码)+训练数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境TextRank环境TensorFlow环境PyQt5及Qt Designer运行环境 模块实现1. 数据预处理2. 抽取摘要3. 模型搭建与编译4. 模型训练与保存5. 图形化界面的开发6. 应用封装 系统测试1. 训练困惑度2. 测试效果3. 模型应用 工…

基于langchain-chatglm本地知识库得部署

项目的技术组成 LLM模型 大型语言模型&#xff08;LLM&#xff0c;是large language model&#xff09;是一种人工智能模型&#xff0c;旨在理解和生成人类语言。它们通过在大量文本数据上进行训练&#xff0c;能够执行多种任务&#xff0c;包括文本总结、翻译、情感分析等。L…

电信卡流量套餐超40G后,该如何解除网速限制?

在和朋友开视频的时候&#xff0c;朋友那边忽然网络中断了&#xff0c;过了会他给我发了一张图片过来&#xff0c;图片如下&#xff1a; 朋友的手机是电信的&#xff0c; 然后我们就在网上查各种解除限制的信息&#xff0c;首先我们按照短信上的提示发送SWFJ到10001&#xff0c…

流量控制与RateLimiter

一背景 如何提高系统的稳定性&#xff0c;简单来说除了加机器外就是服务降级、限流。加机器就是常说的分布式&#xff0c;从整个架构的稳定性角度看&#xff0c;一般SOA每个接口的所能提供的单位时间服务能力是有上限。假如超过服务能力&#xff0c;一般会造成整个接口服务停顿…

异常流量检测

项目目标是为了检测网络异常流量&#xff0c;防止网络攻击行为&#xff0c;本人参与了初期的工作&#xff0c;进行了文献阅读-数据处理-模型构建-参数优化工作。 网络攻击行为主要分为Dos、U2R、Probe等&#xff0c;其对应的流量异常特征为集合异常、点异常、上下文异常。 点异…

网络流量监控分析工具ntopng的安装与使用

我写这篇文章的起因&#xff1a;网上介绍ntopng这款工具的博客不算很多&#xff0c;而且安装方法基本没一个行得通&#xff08;可能是版本更新太快了&#xff09;&#xff0c;我在安装过程中遇到了一些问题&#xff0c;想跟大家分享下&#xff1b;其次&#xff0c;在讲使用方法…

流量异常检测

https://mp.weixin.qq.com/s/9h-hOt630W6k077Rupc9CA 流量异常检测主要有以下三个难点&#xff1a; 流量的大小会随着用户行为发生变化。对于大部分百度云上的业务&#xff0c;白天的访问流量较高&#xff0c;深夜的访问流量较低。这使得流量水位值存在上下文相关性&#xff0…

Android应用流量统计——NetworkStatsManager使用

在没有Root的情况下&#xff0c;Android应用流量统计在6.0之前一直没有太好的办法&#xff0c;官方虽然提供了TrafficStats&#xff0c;但其主要功能是设备启动以来流量的统计信息&#xff0c;和时间信息无法很好的配合。最近再看TrafficStats类时&#xff0c;发现说明中提到&a…

仿设置流量使用——细讲android获取流量使用情况,以及解决调用流量接口不准问题(非TrafficStats,而是NetworkStatsHistory)

不积跬步无以至千里 流量使用情况,好多软件都会带这个功能,比如360的流量监控,好多之类的,手机管家都会带上这个流量计算的功能,连系统应用设置里面也会带一个流量使用情况的查看功能,为什么呢?因为流量的使用关乎到用户使用流量的计费,当流量使用了很多,会给用…

vnstat流量统计(2.8版本)

vnstat流量统计&#xff08;2.8版本&#xff09; vnStat 是一个基于控制台的 Linux 和 BSD 网络流量监视器&#xff0c;它为所选接口保留网络流量日志。它使用内核提供的网络接口统计信息作为信息源。这意味着 vnStat 实际上不会嗅探任何流量&#xff0c;并且无论网络流量率如…

中职流量包分析attack/capture(1)

我希望网络安全的世界大家可以贡献自己的一部分&#xff0c;而不是拿来自私自利 作者拿到的流量包和题目是有出入的&#xff0c;但是因为出的题大同小异所以能分析出来 attack 1. 分 析 attack.pcapng 数 据 包 文 件 &#xff0c;通 过 分 析数据 包 attack.pcapng 找出恶意…

抓包部分软件时无网络+过代理检测 解决办法 安卓黄鸟httpcanary+vmos

解决软件抓包时无网络和代理检测&#x1f680; 需要准备的工具&#xff1a; 安卓手机 vmos pro 需要抓包的软件 第一步&#xff1a;下载好相应版的本的vmos room 第二步&#xff1a;文件中转站->我要导入->导入对应真机需要抓包APP 第三步&#xff1a;测试软件在vmos…

测试apk-异常管控NetTraffic攻击者开发

1. 目的 基于《软件绿色联盟应用体验标准》中 NetTraffic 资源的定义&#xff0c;对 NetTraffic 后台多次小流量数据包的行为模拟。旨在触发手机中异常功耗管控机制。 本次灭屏NetTraffic使用次数至少超过的二个等级:30次,60次&#xff0c;执行如下判断&#xff1a; 绿线不管控…

雷电模拟器无法修改网络,没有出现修改网络的选项,导致fiddler无法连接

对于一个小白来说&#xff0c;可能这就能耗掉一个下午的时间了&#xff0c;比如我&#xff0c;&#xff0c;&#xff0c;&#xff0c;要命的是这种问题对于绝大多数小白还完全不是问题&#xff0c;所以找了很久都没有解决答案&#xff0c;所以我是。。小白中的小白。。 模拟器…

TrackingNet上进行评估

TrackingNet上进行评估 说明&#xff1a;在目标跟踪测试数据集中&#xff0c;在TrackingNet和GOT-10K上的评估结果需要通过在线评估的方式获取。 website&#xff1a;Welcome - EvalAI 自行注册账户&#xff0c;注册好后按照以下操作就可以进行评估了。 在All Changes中找到…

ARP欺骗攻击(流量图片)——dsniff与driftnet使用

ARP欺骗攻击&#xff08;流量&图片&#xff09; 原理&#xff1a; 首先我们![请添加图片描述](https://img-blog.csdnimg.cn/7de7923387224bcda1ea4be958032ae9.png 要明白何为ARP&#xff08;地址解析协议&#xff09;&#xff1a;是根据 IP地址 获取 物理地址 的一个 TC…

Google pixel 原生安卓出现 WiFi 网络受限、优化网速、网络无法连接问题

谷歌从 Android 5.0 开始就引入了「Captive Portal」机制&#xff0c;主要用来检测 WiFI 网络认证是否正常&#xff0c;默认检测访问的是谷歌服务器。 众所周知谷歌服务器是需要404工具才能正常访问&#xff0c;所以如果你没有404工具的情况下&#xff0c;WiFi 就会出现网络受…

悉尼科技大学计算机专业就业,悉尼科技大学计算机专业怎么样

悉尼科技大学计算机科学是一门包含各种各样与计算和信息处理相关主题的系统学科&#xff0c;从抽象的算法分析、形式化语法等等&#xff0c;到更具体的主题如编程语言、程序设计、软件和硬件等。信息化产业的今天&#xff0c;这类专业的重要性也愈加显现。悉尼科技大学的互联网…

悉尼大学计算机专业本科2019,2019申请悉尼大学读本科有哪些要求

悉尼大学是澳洲名校&#xff0c;每年都有不少学生慕名前来留学。那你们知道申请悉尼大学读本科有哪些要求呢? 大师兄留学网【留学网 dsxliuxue.com】小编为大家带来悉尼大学申请条件&#xff0c;希望对大家有帮助。 悉尼大学本科申请条件&#xff1a; 学术要求&#xff1a; 对…

悉尼大学理学院计算机科学,澳洲悉尼大学理学院中国留学生

1 悉尼大学理学院简介 据立思辰留学360介绍&#xff0c;悉尼大学理学院的正式建立是1882年。在之后的50年内&#xff0c;悉尼大学理学院一共培养了353名本科学生&#xff0c;以及聘用了6名在物理&#xff0c;化学&#xff0c;动物学&#xff0c;地质学&#xff0c;植物学&#…