QDesignerでウィジェットをサブクラス化するのが苦労しています。 QDesignerを使用してUIを作成していますが、.proファイルではなくcmakeを使用してコンパイルしています。だから、私は基本的にuiファイルを生成する以外にはQT Creatorを使用しています。QTデザイナでウィジェットをサブクラス化する
今、マウスクリックイベントを無効にするためにQLabelをサブクラス化したいので、私がしなければならないことは、QLabelを右クリックして「昇格」を選択することです。それから私が何を宣伝したいのか聞いてきますので、私は "clickable_qlabel.h"と言います。しかし、私が "make"を呼び出すと、 "ui_mainWindow.h:95:5:error: 'Clickable_QLabel'の型に名前が付けられません。残念ながら、私はclickable_qlabel.hをどこに置く必要があるのか、あるいはすでに存在するかどうかは分かりません。
ご協力いただければ幸いです!
多くのありがとうございます。
[UPDATE]
OK、今、私は次のクラスを作成しました:
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の私の実装である場合(何らかの形で)指示する必要があります。かなりイライラする。
Firtsly、QLabelからサブクラス化するクラスを作成する必要があります。 uiのQLabelをあなたのクラスに昇格させるには、その名前を入力する必要があります。 – someoneinthebox
許可した場合:なぜですか?あなたはqmakeなしであなたのプロジェクトを編集する多くの痛みを持っている、と思う... – Boiethios
@Boiethiosなぜあなたはそう思いますか?それはすべて正常に動作しているようだ。 –