2016-07-12 2 views
3

Я попытался переопределить mouseClickEvent, так как мне нужно отличить правый и левый клик. Я продвинул свой QListView до WavList и написал следующий код, но произошла ошибка.Продвижение виджета Qt: какая разница между этими двумя кодами?

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

Ошибка должна быть ясной: QWidget не является родителем WavList, QListView есть. Вы можете иметь только прямые родитель в списках конструктора инициализатора:

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

Другой конструктор не использует список конструктора для инициализации, чтобы установить отношения виджета, но использует определенную функцию. Конечный результат может быть одним и тем же, но семантика очень различна.

+0

Спасибо за ответ! – Azruine

Смежные вопросы