gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:15:47 25 4
gpt4 key购买 nike

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

现在我想子类化 QLabel 以覆盖鼠标单击事件,据我所知,我所要做的就是右键单击 QLabel 并选择“提升为”。然后它问我想推广什么,所以我说“clickable_qlabel.h”。但是,当我调用“make”时,我得到“ui_mainWindow.h:95:5: error: ‘Clickable_QLabel’ does not name a type”。不幸的是,我不知道我需要把 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

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 实现在哪里。非常令人沮丧。

最佳答案

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

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

}

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

关于c++ - QT 设计器中的子类化小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37454998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com