2014-06-24 18 views
2

我试图用头文件子类QLabel,我得到了错误的构造问题子类一Qlabel C++

智能感知:间接非虚基类是不允许

class foo : public QLabel 
{ 
    Q_OBJECT 

    foo(QWidget* parent = 0) : QWidget(parent) 
    { 

    } 

    void mouseMoveEvent(QMouseEvent * event) 
    { 
     //Capture this 
    } 

}; 

有什么建议,为什么发生这种情况,以及我如何解决它?

+0

您需要,请使用QLabel,而不是QWidget的构造函数 – grisha

回答

2

的问题是在这里:

foo(QWidget* parent = 0) : QWidget(parent) 

您从QLabel继承,但是你的基地指定QWidget。你应该写这这一翻译:

explicit foo(QWidget* parent = Q_NULLPTR) : QLabel(parent) 
//           ^^^^^^ 

另外,请使用explicit对于构造以及Q_NULL_PTR或至少NULL而不是0

+0

最后一句, 这是为了什么? – Tay2510

+1

@ Tay2510:1)避免隐式转换。 2)在C++ 11中使用nullptr。 – lpapp