我很难在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实现的位置。相当令人沮丧。
答案 0 :(得分:0)
的Eh。我的错误,我应该已正确阅读错误消息。我没有包含只传递QWidget的构造函数。添加
QLabelClickable::QLabelClickable( QWidget* parent ) : QLabel(parent) {
}
我的CPP解决了这个问题!万岁。