23 QT - 自定义控件

简介: 23 QT - 自定义控件

在搭建Qt窗口界面的时候,在一个项目中很多窗口,或者是窗口中的某个模块会被经常性的重复使用。一般遇到这种情况我们都会将这个窗口或者模块拿出来做成一个独立的窗口类,以备以后重复使用。

在使用Qt的ui文件搭建界面的时候,工具栏栏中只为我们提供了标准的窗口控件,如果我们想使用自定义控件怎么办?

例如:我们从QWidget派生出一个类SmallWidget,实现了一个自定窗口

// smallwidget.h
class SmallWidget : public QWidget
{
    Q_OBJECT
public:
    explicit SmallWidget(QWidget *parent = 0);
signals:
public slots:
private:
    QSpinBox* spin;
    QSlider* slider;
};
// smallwidget.cpp
SmallWidget::SmallWidget(QWidget *parent) : QWidget(parent)
{
    spin = new QSpinBox(this);
    slider = new QSlider(Qt::Horizontal, this);
    // 创建布局对象
    QHBoxLayout* layout = new QHBoxLayout;
    // 将控件添加到布局中
    layout->addWidget(spin);
    layout->addWidget(slider);
    // 将布局设置到窗口中
    setLayout(layout);
    // 添加消息响应
    connect(spin, 
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
 slider, &QSlider::setValue);
    connect(slider, &QSlider::valueChanged, 
spin, &QSpinBox::setValue);
}

那么这个SmallWidget可以作为独立的窗口显示,也可以作为一个控件来使用:

打开Qt的.ui文件,因为SmallWidget是派生自Qwidget类,所以需要在ui文件中先放入一个QWidget控件, 然后再上边鼠标右键

弹出提升窗口部件对话框

添加要提升的类的名字,然后选择 添加

添加之后,类名会显示到上边的列表框中,然后单击提升按钮,完成操作.

我们可以看到, 这个窗口对应的类从原来的QWidget变成了SmallWidget

再次运行程序,这个widget_3中就能显示出我们自定义的窗口了

目录
相关文章
|
3月前
|
前端开发 程序员 API
【Qt】控件介绍
【Qt】控件介绍
|
6月前
|
XML 缓存 C++
【Qt 控件】Qt 控件提升指南:从基础到高级应用
【Qt 控件】Qt 控件提升指南:从基础到高级应用
792 0
QT TextEdit控件 全面详解
本文详细的介绍了TextEdit控件的各种操作,例如:获取内容、输入控件字符、保持在最后一行添加(自动滚屏)、定时关闭、添加数据换行、向鼠标位置插入一行字符、设置字体颜色属性等操作。 本系列QT全面详解文章目前共有十五篇,本系列文章较为详细的讲述了QT控件的基础操作和使用,也谢谢大家的关注、点赞、收藏。
1526 2
QT TextEdit控件 全面详解
|
6月前
|
数据安全/隐私保护 容器
[Qt5&控件] 控件stackedWidget、lineEdit等的用法
[Qt5&控件] 控件stackedWidget、lineEdit等的用法
84 0
[Qt5&控件] 控件stackedWidget、lineEdit等的用法
|
6月前
Qt6学习笔记八(其他控件)
Qt6学习笔记八(其他控件)
57 0
|
C++
Qt界面优化:Qt窗体控件设置
Qt界面优化:Qt窗体控件设置
438 1
Qt界面优化:Qt窗体控件设置
|
设计模式
【QT】QT布局管理器
【QT】QT布局管理器
【QT】QT布局管理器
|
数据安全/隐私保护
8、QT基础——常用控件
8、QT基础——常用控件
362 0
8、QT基础——常用控件
Qt之自定义控件(开关按钮)
简述 接触过IOS系统的童鞋们应该对开关按钮很熟悉,在设置里面经常遇到,切换时候的滑动效果比较帅气。 通常说的开关按钮,有两个状态:on、off。 下面,我们利用自定义控件来实现一个开关按钮。 简述 原理 源码 示例 效果 源码 更多参考 原理 重写鼠标按下事件(mousePressEvent)、释放事件(mouseReleaseEve
3059 0