Qt 实现自定义Ui控件例子,以自定义的Slider为例(QWidget)

本文详细介绍了如何在Qt中创建自定义控件MySlider,包括继承QSlider,重写相关事件处理函数以实现拖动功能,并展示了如何将控件编译为Qt Creator可用的插件。此外,还讲解了如何在不同环境下使用该控件,涉及头文件、库文件的整理及项目配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明

Qt可以比较方便地实现自定义控件在Qt Creator中使用。网上也有很多大神的控件可以使用,但是如果想要自己简单定制也可以按照这个流程。

本文的要点:

【1】如何实现一个自定义控件?

本文使用的方法有两个步骤:

  1. 先在一个普通项目中实现使用
  2. 新建Qt Ui控件项目编译成dll和相关lib

【2】自定义控件如何在多个环境下使用?

  1. Qt Creator只认自己相匹配的库
  2. 代码中可以使用多个环境的库,前提是要编译链接好相关库。

因此,文章也分两方面去阐述,第一部分编写,和第二部分使用。

第一部分:编写

1、在普通项目中使用

首先,新建一个QWidget项目。

界面上拖拽一个文字显示框(QPlainTextEdit)和一个垂直滑块(QSlider)如图:

然后,新建一个类MySlider,继承于QSlider,Q_OBJECT宏记得要加上。

#ifndef MYSLIDER_H
#define MYSLIDER_H

#include <QSlider>
#include <atomic>

class MySlider : public QSlider
{
    Q_OBJECT
public:
    MySlider(QWidget *parent = nullptr);

protected:
    void paintEvent(QPaintEvent *ev) override;
    void mousePressEvent(QMouseEvent *ev) override;
    void mouseReleaseEvent(QMouseEvent *ev) override;
    void mouseMoveEvent(QMouseEvent *ev) override;
private:
    std::atomic_bool mValiedMouseFlag{false};
    std::atomic_int  mSilderUp{0};
};

#endif // MYSLIDER_H

 重写的几个方法可以点击到头文件里查看哪些用得到需要重写:

这里重写的是:

    void paintEvent(QPaintEvent *ev) override; //绘制控件
    void mousePressEvent(QMouseEvent *ev) override; //鼠标按下
    void mouseReleaseEvent(QMouseEvent *ev) override; //鼠标松开
    void mouseMoveEvent(QMouseEvent *ev) override; //鼠标移动

 还有需要注意的是在protected区域的对象虽然重写在public也可以运行,也要保持不改,因为编译成控件以后有可能会不识别。

至于下面的两个变量:

  • mValiedMouseFlag用于保存鼠标按下状态(对于一些关键的变量习惯用atom 可以改成普通的bool类型)
  • mSilderUp用于保存按下鼠标时,鼠标指针离滑块顶部的距离(对于一些关键的变量习惯用atom 可以改成普通的int类型)

然后开始在cpp内实现几个方法,首先是绘图:

//滑块高度固定40
const int heightSlider = 40;

void MySlider::paintEvent(QPaintEvent *ev)
{
    Q_UNUSED(ev);
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing,true);
    QRect rect = QRect(4,4,this->width()-8,this->
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值