• 扬帆起航——Qt自定义控件介绍



    前言

    Qt 提供了丰富的控件、工具和库,可以帮助开发人员快速创建现代化的跨平台应用程序。但是对于某些特殊的需求,现有的控件可能无法满足。这时,自定义控件成为了一个值得考虑的选择。Qt 提供了完善的 API 和开发工具,可以帮助开发人员轻松地创建自己的独特控件。通过本文的介绍,您可以了解自定义控件的优势、创建自定义控件的步骤以及常见的自定义控件。


    自定义控件的定义

    在我看来,自定义控件的定义如下:
    实现没有自带的控件或使用原有的控件组合在一起实现一个新的控件
    这就是定义。

    自定义控件的好处

    在我们日常使用软件的过程中,我们可以发现其他的软件的界面比我们高大上很多,但是当我们点开软件的安装路径的时候,就会发现他是Qt5或Qt6写的。
    思考:
    为什么我们自己写的界面却这么拉跨呢?
    解决办法:
    我们可以是用qss来美化我们的界面,这是一种方法,但是还有一种方法就是自定义控件。
    对于我们编码技术:
    在自定义控件中,我们需要熟悉原版qt的用,并灵活使用他,自定义控件对于我们编码有一个质的提升!

    总结:
    自定义控件可以提供更好的用户体验和更强的功能。通过自定义控件,开发人员可以更好地满足用户的需求,同时也可以提高应用程序的效率和美观度。以下是一些自定义控件的优势:

    • 更好的功能和性能
    • 更好的用户体验
    • 更好的设计和美观度
    • 更好的可维护性和可扩展性

    如何实现自定义控件

    实现没有自带的控件

    在Qt基础教程中,我们知道,在QWidget中,我们可以使用QPainter类进行绘画,其实在Qt自带的控件都是通过QPainterQPainterPath、qt事件如:QMouseEvent组合起来实现的.
    我们可以通过定义一个QWidget类,定义变量,操作函数等来实现他。
    如下一个QRulerProgress的代码。
    注:在qt原版中是没有的。

    
    class RoundProgress : public QWidget
    {
        Q_OBJECT
        void paintEvent(QPaintEvent *e);
        void drawBackGround(QPainter &p);
        void drawprogress(QPainter &p);
    
        QColor bgc;
        QColor ValueBgc;
        QColor TextColor;
        int PenWidth;
        int Value;
        QFont Textfont;
    
        QVariantAnimation *animation;
        int rate;
    
    public:
        explicit RoundProgress(QWidget *parent = nullptr);
        void SetBackGroundColor(const QColor &c);
        void SetValueColor(const QColor &c);
        void SetTextColor(const QColor &c);
        void SetPenWidth(int width);
        void SetRange(int m,int max);
        void SetValue(int v);
        void SetFont(const QFont &f);
        void SetRate(int r);
    
    signals:
    
    };
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    我们通过定义变量,来实现绘制。
    我们通过定义不同的操作函数让我们使用者快速使用。
    在后面我会详细讲这些代码是如何去实现,还有如何去得到这种自定义的思想。
    如果遇到我的文章没有讲到我会一一讲解。

    如何使用自定义控件

    在qt中,我们可以使用提升法来提升我们自己写的控件。
    提升法:如有两个继承于QWidget的类w1,w2.w2是我们在.ui文件中拖拽出来的,w1是我们自己的控件,如果我们没有dll动态库,我们是不能在.ui文件中直接拖拽出我们的控件的,那怎么办?我们可以使用提升法,把w2变成w1。

    在ui文件中拖拽出一个widget,右键他,可以看到提升为,点击他。
    在这里插入图片描述

    一般基类名称使用QWidget就可以,在我们自定义控件中。
    在提升的类名称中输入你的控件,点击添加,提升。
    在这里插入图片描述
    如果你已经提升了某个类在上方,我们则可以直接双击他或者点击某个控件点击下面的提升。

    在下一个专栏我会讲,我们如何把他做出一个dll/so等动态库文件,直接使用。

    测试和优化

    完成自定义控件后,您需要进行测试和优化。您可以测试控件的功能、性能和兼容性,以确保其可以正常工作并满足用户的要求。

    常见的自定义控件

    表盘控件
    汽车仪表盘
    圆弧仪表盘
    百分比表盘
    半圆仪表盘
    进度仪表盘
    速度仪表盘
    范围仪表盘
    简单指南针仪表盘
    指南针
    旋转仪表盘
    进度控件
    水波进度条
    百分比进度
    圆环进度条
    等待进度条
    弧形进度条
    倒计时进度条

    除了上面这些,还有很多,关注我吧,带你探索自定义控件这块神秘领域!

    总结

    总的来说,自定义控件好处多多,但是做这个要有毅力!
    在以后的几个月我会不断更新自定义控件,大家可以评论让博主做不同的控件。

  • 相关阅读:
    【C语言航路】第七站:结构体初阶
    Make 详解
    【python中级】func_timeout程序超时处理
    智能交通信号灯控制策略
    好用且免费的ChatGPT工具
    一文解读该用开源BI工具还是智能BI工具?
    服务案例|AI算法在Oracle指标异常检查、故障预测之牛刀小试
    Git仓库迁移实操(附批量迁移脚本)
    混合Rollup:探秘 Metis、Fraxchain、Aztec、Miden和Ola
    在C++中什么是异常处理以及如何使用try-catch块
  • 原文地址:https://blog.csdn.net/m0_62599305/article/details/130898638