【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_OBJECTpublic: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.自定义控件

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

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

相关文章

探索经典算法:贪心、分治、动态规划等

1.贪心算法 贪心算法是一种常见的算法范式&#xff0c;通常在解决最优化问题中使用。 贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法范式。其核心思想是选择每一步的最佳解决方案&#xff0c;以期望达到最终的全局最优解。这种算法特点在于只考虑局部最优解&am…

React进阶之路(一)-- JSX基础、组件基础

文章目录 React介绍React开发环境搭建项目目录说明以及相关调整 JSX基础JSX介绍JSX中使用js表达式JSX列表渲染JSX条件渲染JSX样式处理JSX注意事项 组件基础组件的概念函数组件类组件事件绑定如何绑定事件获取事件对象传递额外参数 组件状态状态不可变表单处理受控表单组件非受控…

扭矩传感器采用一阶RC滤波

扭矩传感器内部的一阶RC&#xff08;电阻-电容&#xff09;滤波器是一种用于滤除高频噪声和干扰的电路&#xff0c;以确保传感器输出的信号平滑和稳定。这种滤波器通常用于传感器输出信号的处理&#xff0c;以减少测量中的高频噪声。 一阶RC滤波器通常由一个电阻&#xff08;R…

【广州华锐互动】VR虚拟仿真技术为航测实践教学提供了哪些帮助?

在过去的几十年里&#xff0c;航空测量技术发展迅速&#xff0c;为我们提供了前所未有的地理信息获取手段。然而&#xff0c;这个领域的发展并未停止&#xff0c;最新的技术进步——虚拟现实(VR)——正在为航测实践教学开启新的篇章。 VR虚拟现实技术能够创建和体验三维虚拟环境…

linux循环继续fordodone数值处理和脚本的追踪调试

格式 for &#xff08;&#xff08;初始值&#xff1a;限制值&#xff1b;步长&#xff09;&#xff09; do 程序段 done 注意点&#xff1a;$(()) 数值运算 $()命令 ${}取值 sh [-nvx] *.sh -n 不执行脚本&#xff0c;检查语法错误-常用 -v 执行之前&#xff0c;将…

vue项目npm install报错解决

一、报错信息 node-sass4.14.1 postinstall: node scripts/build.js 二、解决方式 &#xff08;1&#xff09;删除未成功安装的 node_modules 文件&#xff1b; &#xff08;2&#xff09;为 node-sass 单独设置镜像源&#xff1b; npm config set sass_binary_sitehttps:/…

STM32H750之FreeRTOS学习--------(五)临界段代码保护

FreeRTOS 文章目录 FreeRTOS五、临界段代码保护临界段代码保护函数任务级进入临界段任务级退出临界段中断级进入临界段中断级退出临界段 任务调度器的挂起和恢复挂起任务调度器恢复任务调度器挂起任务调度器恢复任务调度器 五、临界段代码保护 临界段代码也叫做临界区&#xf…

设计模式-状态模式 golang实现

一 什么是有限状态机 有限状态机&#xff0c;英⽂翻译是 Finite State Machine&#xff0c;缩写为 FSM&#xff0c;简称为状态机。 状态机不是指一台实际机器&#xff0c;而是指一个数学模型。说白了&#xff0c;一般就是指一张状态转换图。 已订单交易为例&#xff1a; 1.…

js:React中使用classnames实现按照条件将类名连接起来

参考文档 https://www.npmjs.com/package/classnameshttps://github.com/JedWatson/classnames 安装 npm install classnames示例 import classNames from "classnames";// 字符串合并 console.log(classNames("foo", "bar")); // foo bar//…

助听器不仅能帮你听到,还有另外一个功能……

你是否有过这样的经历&#xff0c;走在路上突然感觉脚下一软&#xff0c;差点摔倒&#xff1f; 在黑暗的环境中行走时&#xff0c;总是觉得不稳&#xff0c;需要借助外物来保持平衡&#xff1f;…… 如果你有这样的困扰&#xff0c;那么你可能不知道&#xff0c;你的听力可能…

ElementUI之el-progress动态修改进度条里面文本颜色与进度条色块统一

1.效果&#xff1a; 2.实现方式 通过行内style样式动态给整个progress赋颜色 再在样式里给进度条文字单独设置颜色为默认继承父级颜色就ok啦 <el-progress class"custom-progress" stroke-linecap"square" :style"{color:item.color}" :colo…

[极客大挑战 2019]Http 1

题目环境&#xff1a; 看起来挺花里胡哨的 F12查看源代码寻找隐藏文件 这是啥子呀&#xff0c;果然防不胜防 点击隐藏文件Secret.php 它不是来自这个地址的请求 报头&#xff1a;https://Sycsecret.buuoj.cn 需要抓包&#xff0c;在抓包前了解部分数据包参数 GET:到 Host:来自 …