QT 继承Qt原有的类并完成新功能

Posted leocc325

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT 继承Qt原有的类并完成新功能相关的知识,希望对你有一定的参考价值。

由于Qt中没有能在界面直接点击文字实现函数调用的功能,所以这个功能需要我们自己来实现。

我们在UI界面中放置一个QLabel对象,点击转到槽

技术图片

可以看到此时的信号中,是没有clicked()信号的,因此这个功能需要我们自己来写。

第一步:添加MyLabel.h和MyLabel.cpp,并继承QLabel,然后需要在头文件中添加鼠标事件和信号

#ifndef MYLABEL_H
#define MYLABEL_H
#include <QLabel>

class MyLabel : public QLabel
{  
    Q_OBJECT
public:
    MyLabel(QWidget * parent = nullptr);
    ~MyLabel(void);

protected:
    void mouseReleaseEvent(QMouseEvent * event);

signals:
    void clicked();
};

#endif // MYLABEL_H

第二步:在源文件中实现头文件中的函数

#include "mylabel.h"
#include <QMouseEvent>
MyLabel::MyLabel(QWidget *parent)
{
    this->setParent(parent);//必须设置父对象,不然这个标签可能不会显示
}

MyLabel::~MyLabel()
{

}

void MyLabel::mouseReleaseEvent(QMouseEvent *event)
{

    if(event->button() == Qt::LeftButton)
    {
        Q_UNUSED(event)
            emit clicked();
    }
}

第三步:将UI界面上的QLabel提升为MyLabel

技术图片

提升之后就可以在旁边看到

技术图片

至此,只需要对提升好的label对应的槽函数进行编辑,并将他们connect,就可以实现点击文字实现槽函数功能了

第四步:写好需要实现的槽函数功能,我们这里实现的功能是点击这个label,可以在文本框里打出测试成功的字样

connect(ui->label,SIGNAL(clicked()),this,SLOT(on_label_clicked()));


void Test::on_label_clicked()
{
    ui->plainTextEdit->appendPlainText("测试成功");
}

输出情况如下

技术图片

同理,可以将这个方式应用到其他所有部件的功能拓展上。

 

以上是关于QT 继承Qt原有的类并完成新功能的主要内容,如果未能解决你的问题,请参考以下文章

26.Qt Quick QML-RotationAnimationPathAnimationSmoothedAnimationBehaviorPauseAnimationSequential(代码片段

QT之SQL的使用

Qt - 从基类继承一个类

Qt中的c++继承基础

Qt,两个QWidget对象之间的简单连接

QT 实用代码片段