【QT】 Qt自定义ui控件

在使用Qt的ui设计时,Qt为我们提供了标准的窗口控件,但是在很多复杂工程中,标准窗口控件并不能满足所有的需求,这时就需要我们自定义控件。我们自定义的类既可以作为独立的窗口显示,又可以作为一个控件显示。


我们要实现的自定义控件效果如下:

图片名称

点击spinBox,滑动条Slider开始滑动。滑动条Slider开始滑动,spinBox的数字也开始改变。spinBox和滑动条Slider通过在ui设计时拖动控件实现。



步骤如下:

1.1 添加新文件 - Qt – 设计师界面类 (.h .cpp .ui)

创建一个Qt设计师窗体文件和相应的类(C++头文件和源文件)用于实现,您可以将此窗体文件和类加入到已经存在的Qt 控件项目中。

图片名称

界面模板选择最干净的Widget:

图片名称

给自己设计的界面类取个名字,SmallWidget:

图片名称



1.2 smallwidget.ui中 设计 QSpinBox和QSlider 两个控件

smallwidget.ui 中,拖拽 QSpinBoQSlider 这两个控件,选中 SmallWidget 对象,选中水平布局。

图片名称

注意:SmallWidget的类型是Qwidget



1.3 实现功能,并提供 getNum 和 setNum对外接口

smallwidget.h

class SmallWidget : public QWidget
{
    Q_OBJECT

public:
    explicit SmallWidget(QWidget *parent = nullptr);
    ~SmallWidget();

    //设置两个对外接口
    void setNum(int num);
    int getNum();

private:
    Ui::SmallWidget *ui;
};

smallwidget.cpp

#include "smallwidget.h"
#include "ui_smallwidget.h"

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

    // QSpinBox数字改变 QSlider跟着移动
    connect(ui->spinBox, SIGNAL(valueChanged(int)), ui->horizontalSlider, SLOT(setValue(int)));


    // QSlider移动 QSpinBox数字跟着改变
    connect(ui->horizontalSlider, SIGNAL(valueChanged(int)), ui->spinBox, SLOT(setValue(int)));
}


//设置值
void SmallWidget::setNum(int num)
{
    ui->spinBox->setValue(num);
}

//获取值
int SmallWidget::getNum(){
    return ui->spinBox->value();
}



1.4 Widget.ui中使用自定义控件,拖拽一个Widget,点击提升为,点击添加,点击提升

widget.ui 中,拖拽一个Widget,

图片名称

点击提升为,

图片名称

点击添加,

图片名称

点击提升。

图片名称

注意,这时 widget.ui 中 widget 的类名从 QWidget 变成 SmallWidget 。

图片名称

运行效果:

图片名称


1. 5 点击按钮,获取当前值,设置当前值

widget.ui 中,再放置两个 QPushButon 按钮,用来获取当前值,设置当前值。

图片名称

widget.cpp

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


    //点击按钮 获取当前自定义的smallWidget的值
    connect(ui->btn_getNum, &QPushButton::clicked, ui->smallWidget, [this](){
        qDebug() << ui->smallWidget->getNum();
    });


    //点击按钮 设置当前自定义的smallWidget的值
    connect(ui->btn_setNum, &QPushButton::clicked, ui->smallWidget, [this](){
        ui->smallWidget->setNum(20);
    });
}

ui->smallWidget 是自定义 SmallWidget 类的实例,因此可以调用SmallWidget` 类的接口,getNum() 和 setNum()。

图片名称

运行结果:

图片名称



参考链接:
手把手教QT—8.自定义控件

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

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

相关文章

MySQL 8.0 Clone 备份恢复演练

文章目录 前言1. 恢复目标2. 环境说明3. 克隆数据4. 恢复全量数据5. 注册增量日志6. 应用增量日志 后记 前言 上一篇文章中&#xff0c;我们介绍了使用 Clone 插件进行备份&#xff0c;相关的恢复流程将在本篇文章介绍。 MySQL 8.0 Clone Plugin 详解 恢复增量数据的方法&…

同创永益与国泰君安证券签署全面战略合作协议

10月24日&#xff0c;“生态赋能 智绘未来”国泰君安2023年金融科技文化节主题论坛召开&#xff0c;同创永益董事长朱柯、副总裁朱晓岚受邀出席活动&#xff0c;并与国泰君安总裁王松、首席信息官俞枫共同签署战略合作协议。双方将围绕产业研究、技术创新、人才培养等多方面方面…

Microsoft Dynamics 365 CE 扩展定制 - 7. 安全

在本章中,我们将介绍以下内容: 构建累积安全角色配置业务单元层次结构基于分层位置配置访问配置和分配字段级安全组建团队并共享设置访问团队对静止数据进行加密以满足FIPS 140-2标准管理Dynamics 365在线SQLTDE加密密钥简介 Dynamics 365是一个强大的平台,具有超过10年的良…

02-PostgreSQL的基本使用

一、数据库操作 ①: 登录到数据库 psql -U postgres -d postgres -h 127.0.0.1②:查看所有数据库 \l③: 创建数据库 # 创建一个名为 mydb 的数据库 create database mydb;④:切换数据库 # \c 数据库名 \c mydb⑤:删除数据库 # 删除前 先确保数据库没有被连接 drop databa…

黑色星期五推广策略:TikTok海外网红营销加速品牌增长

在数字化时代&#xff0c;TikTok已经成为了一个具有巨大潜力的社交媒体平台&#xff0c;它不仅让用户分享短视频&#xff0c;还为品牌提供了一个独特的宣传渠道。尤其是在黑色星期五这个全球购物盛宴的时刻&#xff0c;品牌有机会通过TikTok网红营销来提升销售额。本文Nox聚星将…

Linux学习笔记--高级

Shell概述 1&#xff0c;shell概述 是一个c语言编写的脚本语言&#xff0c;是linux和用户的桥梁&#xff0c;用户输入命令交给shell处理。shell&#xff0c;将相应的操作传递给内核&#xff08;kernel&#xff09;&#xff0c;内核把处理的结果输出给用户 1.1Shell解释器有哪…

CSS 下拉菜单、提示工具、图片廊、计数器

一、CSS 下拉菜单&#xff1a; CSS下拉菜单用于创建一个鼠标移动上去后显示下拉菜单的效果。示例&#xff1a; <style> .dropdown { position: relative; display: inline-block; } .dropdown-content { display: none; position: absolute; background-color: #f9f…

shopee、亚马逊卖家如何安全给自己店铺测评?稳定测评环境是关键

大家都知道通过测评可以提升产品的转化率&#xff0c;提升产品的销量&#xff0c;那么做跨境平台的卖家如何安全的给自己店铺测评呢&#xff1f; 无论是亚马逊、拼多多Temu、shopee、Lazada、wish、速卖通、敦煌网、Wayfair、雅虎、eBay、Newegg、乐天、美客多、阿里国际、沃尔…

研发管理用什么软件?

研发管理用什么软件 研发管理用的软件有&#xff1a;1、JIRA&#xff1b;2、Confluence&#xff1b;3、彩虹PDM软件。彩虹PDM软件 是由南宁市二零二五科技有限公司 自主研发&#xff0c;为用户提供“产品全生命周期管理解决方案”。产品结构管理、BOD管理、零部件管理、工艺管理…

时间序列预测:深度学习、机器学习、融合模型、创新模型实战案例(附代码+数据集+原理介绍)

本文介绍->给大家推荐一下我的时间序列预测专栏&#xff0c;本专栏平均质量分98分&#xff0c;而且本专栏目前免费阅读&#xff0c;其中涉及机器学习、深度学习、融合模型、个人创新模型、数据分析等一系列有关时间序列的专栏&#xff0c;其中的实战的案例不仅有简单的模型类…

宝塔部署QQ机器人,提示OpenSSL 1.0.2k-fips 26 Jan 2017

1、报错预览 Traceback (most recent call last):File "/www/wwwroot/python/bot-one/main.py", line 5, in <module>import requestsFile "/www/wwwroot/python/bot-one/343ae0eb0d491a10a1a00c0621b03ed0_venv/lib/python3.9/site-packages/requests/_…

BP神经网络的数据分类——语音特征信号分类

大家好&#xff0c;我是带我去滑雪&#xff01; BP神经网络&#xff0c;也称为反向传播神经网络&#xff0c;是一种常用于分类和回归任务的人工神经网络&#xff08;ANN&#xff09;类型。它是一种前馈神经网络&#xff0c;通常包括输入层、一个或多个隐藏层和输出层。BP神经网…

VSCode设置中文语言界面(VScode设置其他语言界面)

一、下载中文插件 二、修改配置 1、使用快捷键 CtrlShiftP 显示出搜索框 2、然后输入 configure display language 3、点击 (中文简体) 需要修改的语言配置 三、重启 四、可能出现的问题 1、如果configure display language已经是中文配置&#xff0c;界面仍是英文 解决&a…

C盘清理指南(四)——垃圾清理工具

往期目录集合&#xff1a; C盘清理指南&#xff08;一&#xff09; 内存小的本质原因https://blog.csdn.net/jsl123x/article/details/134273657?spm1001.2014.3001.5501C盘清理指南&#xff08;二&#xff09;——盘符划分操作https://blog.csdn.net/jsl123x/article/detail…

快速了解什么是跳跃表(skip list)

什么是跳跃表&#xff08;skip list&#xff09; 跳跃表&#xff08;Skip List&#xff09;是一种概率性的数据结构&#xff0c;它通过在多层链表的基础上添加“快速通道”来提高搜索效率。跳跃表的效率可以与平衡树相媲美&#xff0c;即在平均和最坏的情况下&#xff0c;查找…

Xcode15更新内容

参考博客&#xff1a; 【WWDC 2023】Xcode 15 更新内容 文章目录 1. xcode15起&#xff0c;项目内创建的图片可以使用点语法访问2.2. UIKit项目也可以使用预览功能3. Xcode新增标签功能4.Log分类 1. xcode15起&#xff0c;项目内创建的图片可以使用点语法访问 2.2. UIKit项目也…

Linux C语言(8)

1、指针 1.1 概念 指针就是地址指针是一种数据类型&#xff0c;是一种保存地址的数据类型int是一种数据类型&#xff0c;是一种保存整数的数据类型 1 2 3 4float是一种数据类型&#xff0c;是一种保存浮点数的数据类型 3.14 1.2 什么是地址 内存分配的最小单位是字节&#xf…

【Leetcode】【数据结构】【C语言】判断两个链表是否相交并返回交点地址

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {struct ListNode *tailAheadA;struct ListNode *tailBheadB;int count10;int count20;//分别找尾节点&#xff0c;并顺便统计节点数量&#xff1a;while(tailA){tailAtailA->next;c…

flutter开发报错The instance member ‘widget‘ can‘t be accessed in an initializer

文章目录 问题描述问题原因解决方法 问题描述 The instance member ‘widget’ can’t be accessed in an initializer. 问题原因 “The instance member ‘widget’ can’t be accessed in an initializer” 错误是因为在初始化器列表中&#xff08;constructor initializer…

Shell 脚本介绍及应用案例

目录 Shell传递参数 $特殊符号含义 示例&#xff1a; Shell运算符 关系运算符 文件运算符 示例&#xff1a; Shell 流程控制 if判断 格式&#xff1a; 示例&#xff1a; 结果&#xff1a; for循环 格式&#xff1a; 示例&#xff1a; 结果&#xff1a; w…