2016-05-26 32 views
0

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の私の実装である場合(何らかの形で)指示する必要があります。かなりイライラする。

+0

Firtsly、QLabelからサブクラス化するクラスを作成する必要があります。 uiのQLabelをあなたのクラスに昇格させるには、その名前を入力する必要があります。 – someoneinthebox

+0

許可した場合:なぜですか?あなたはqmakeなしであなたのプロジェクトを編集する多くの痛みを持っている、と思う... – Boiethios

+0

@Boiethiosなぜあなたはそう思いますか?それはすべて正常に動作しているようだ。 –

答えて

0

Eh。私のエラー、私は正しくエラーメッセージを読んでいる必要があります。 QWidgetだけを渡すためのコンストラクタは含まれていませんでした。追加する

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

} 

私のCPPに問題が解決しました!ハワイ。

関連する問題