在QT设计器中对小部件进行子类化

时间:2016-05-26 08:04:35

标签: c++ qt

我很难在QDesigner中继承Widgets。我正在使用QDesigner来创建我的UI,但使用cmake来编译而不是.pro文件。所以我基本上只使用QT Creator来生成ui文件。

现在我想继承QLabel以覆盖鼠标点击事件,所以据我所知,我所要做的就是右键单击QLabel并选择“提升到”。然后它问我要推广什么,所以我说“clickable_qlabel.h”。但是,当我调用“make”时,我得到“ui_mainWindow.h:95:5:错误:'Clickable_QLabel'没有命名类型”。不幸的是我不知道我需要把clickable_qlabel.h放在哪里,或者它是否已经存在,我只需要用我的代码填充它。

非常感谢任何帮助!

非常感谢。

[UPDATE]

好的,现在我创建了以下类:

QLabelClickable.h

#ifndef _QLABELCLICKABLE_H_
#define _QLABELCLICKABLE_H_

#include <QLabel>
#include <QMouseEvent>

class QLabelClickable : public QLabel
{
Q_OBJECT
public:
    explicit QLabelClickable( const QString& text="", QWidget* parent=0 );
    ~QLabelClickable();
signals:
    void clicked(int, int);
protected:
    void mousePressEvent(QMouseEvent* event);
};

#endif

QLabelClickable.cpp

#include "QLabelClickable.h"

QLabelClickable::QLabelClickable(const QString& text, QWidget* parent)
    : QLabel(parent)
{
    setText(text);
}

QLabelClickable::~QLabelClickable()
{
}

void QLabelClickable::mousePressEvent(QMouseEvent* event)
{
    emit clicked(event->x(),event->y());
}

所以这段代码编译精美。所以现在我在QtDesigner中创建一个名为label4的QLabel,然后右键单击并选择“Promote to”。然后在“Promoted class name:”下输入“QLabelClickable”并在“Header file:”下输入“QLabelClickable.h”。然后我点击“推广”。精彩。但我仍然得到错误:

Vigil/build/ui_mainWindow.h:328:42: error: no matching function for call to ‘QLabelClickable::QLabelClickable(QWidget*&)’ label_4 = new QLabelClickable(tab);

很明显QtDesigner需要(以某种方式)指示我的QLabelClickable实现的位置。相当令人沮丧。

1 个答案:

答案 0 :(得分:0)

的Eh。我的错误,我应该已正确阅读错误消息。我没有包含只传递QWidget的构造函数。添加

QLabelClickable::QLabelClickable( QWidget* parent ) : QLabel(parent) {

}

我的CPP解决了这个问题!万岁。