Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT设计器中的小部件子类化_C++_Qt - Fatal编程技术网

C++ QT设计器中的小部件子类化

C++ QT设计器中的小部件子类化,c++,qt,C++,Qt,我很难在QDesigner中对小部件进行子类化。我使用QDesigner来创建我的UI,但使用cmake来编译而不是.pro文件。因此,我基本上只使用QT-Creator生成ui文件 现在我想将QLabel子类化,以覆盖鼠标单击事件,因此据我所知,我所要做的就是右键单击QLabel并选择“升级到”。然后它问我想推广什么,所以我说“clickable_qlabel.h”。然而,当我调用“make”时,我得到“ui\u mainWindow.h:95:5:error:'Clickable\u QLa

我很难在QDesigner中对小部件进行子类化。我使用QDesigner来创建我的UI,但使用cmake来编译而不是.pro文件。因此,我基本上只使用QT-Creator生成ui文件

现在我想将QLabel子类化,以覆盖鼠标单击事件,因此据我所知,我所要做的就是右键单击QLabel并选择“升级到”。然后它问我想推广什么,所以我说“clickable_qlabel.h”。然而,当我调用“make”时,我得到“ui\u mainWindow.h:95:5:error:'Clickable\u QLabel'没有命名类型”。不幸的是,我不知道我需要把clickable_qlabel.h放在哪里,或者它是否已经存在,我只需要用我的代码填充它

任何帮助都将不胜感激

非常感谢

[更新]

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

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
因此,这段代码编译得非常漂亮。现在我在QtDesigner中,创建了一个名为label4的QLabel,右键单击并选择“升级到”。然后在“提升的类名:”下键入“QLabelClickable”,在“头文件”下键入“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实现的位置。相当令人沮丧。

嗯。我的错误,我应该正确阅读错误消息。我没有包含仅用于传递QWidget的构造函数。添加

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

}

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

嗯。我的错误,我应该正确阅读错误消息。我没有包含仅用于传递QWidget的构造函数。添加

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

}

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

首先,您必须创建一个类,该类将是QLabel的子类。然后,您必须通过键入类的名称将ui的QLabel升级到类中。如果允许:为什么?如果没有qmake,你会很痛苦地编译你的项目,我想…@Boiethios你为什么这么认为?“看起来一切都很好。”Squid先生,因为有这么多凌乱的MOC等等。也许很简单,我不知道;但是当你用Qt creator制作Qt程序时,它会帮你处理这些事情。@Boiethios谢谢你的建议,我会记住的。然而,我没有遇到任何问题。事实上,我的CMakeLists中的行:set(CMAKE_AUTOMOC ON)和QT5_WRAP_UI(UI_HDRS${UI_FILES})为我解决了所有这些问题。首先,您必须创建一个类,该类将是QLabel的子类。然后,您必须通过键入类的名称将ui的QLabel升级到类中。如果允许:为什么?如果没有qmake,你会很痛苦地编译你的项目,我想…@Boiethios你为什么这么认为?“看起来一切都很好。”Squid先生,因为有这么多凌乱的MOC等等。也许很简单,我不知道;但是当你用Qt creator制作Qt程序时,它会帮你处理这些事情。@Boiethios谢谢你的建议,我会记住的。然而,我没有遇到任何问题。事实上,我的CMakeLists中的行:set(CMAKE_AUTOMOC ON)和QT5_WRAP_UI(UI_HDRS${UI_FILES})为我解决了所有这些问题。