我尝试重新实现mouseClickEvent
,因为我需要区分右键单击和左键单击。我将QListView
提升为WavList
,并编写了以下代码,但发生了错误。
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";
}
这很有效!我的问题是,区别是什么?
答案 0 :(得分:3)
错误应该是明确的:QWidget
不是WavList
的父级,QListView
是。您只能在构造函数初始化列表中包含直接父项:
WavList::WavList(QWidget *parent) : QListView(parent)
{
...
}
其他构造函数不使用构造函数初始值设定项列表来设置窗口小部件关系,而是使用特定函数。最终结果可能是相同的,但语义是非常不同的。