2016-07-12 4 views
3

私は右クリックと左クリックを区別する必要があるので、mouseClickEventを再実装しようとしました。 をWavListに昇格させ、次のコードを書きましたが、エラーが発生しました。Qtウィジェットプロモーション:これらの2つのコードの違いは何ですか?

wavlist.h

#ifndef WAVLIST_H 
#define WAVLIST_H 

#include <QWidget> 
#include <QListView> 
#include <QMouseEvent> 
#include <QDebug> 

class WavList : public QListView 
{ 
    Q_OBJECT 
public: 
    explicit WavList(QWidget *parent = 0); 

protected: 
    void mousePressEvent(QMouseEvent* event); 
}; 

#endif // WAVLIST_H 

wavlist.cpp

#include "wavlist.h" 

WavList::WavList(QWidget *parent) : QWidget(parent) 
{ 
    qDebug() << "lol"; 
} 

void WavList::mousePressEvent(QMouseEvent *event) 
{ 
    if (event->button() == Qt::RightButton) 
    { 
     event->ignore(); 
    } 
    else 
    { 
     QListView::mousePressEvent(event); 
    } 
} 

私は、次のエラーました: C2614: 'WavList': illegal member initialization: 'QWidget' is not a base or memberを。

私はこのように私のコードを修正しました。

WavList::WavList(QWidget *parent) 
{ 
    this->setParent(parent); 
    qDebug() << "lol"; 
} 

これは機能しました。私の質問は、違いは何ですか?

答えて

3

エラーはクリアする必要があります。QWidgetWavListの親ではなく、QListViewです。

WavList::WavList(QWidget *parent) : QListView(parent) 
{ 
    ... 
} 

他のコンストラクタは、ウィジェットの関係を設定するためにコンストラクタの初期化リストを使用しませんが、特定の機能を使用しています。あなただけのコンストラクタ初期化子リストで直接の親を持つことができます。最終的な結果は同じかもしれませんが、セマンティクスは非常に異なります。

+0

答えをありがとう! – Azruine

関連する問題