我想对QListWidgetItem进行子类化,但我不明白我做错了什么。我使用相同的原理对QListWidget进行了子类化,没有遇到任何问题。
这是我的头文件:
#ifndef LSPROLISTITEM_H
#define LSPROLISTITEM_H
#include <QObject>
#include <QListWidgetItem>
class LsproListItem : public QListWidgetItem
{
Q_OBJECT
public:
explicit LsproListItem(QString &text, QObject *parent = 0);
signals:
public slots:
};
#endif // LSPROLISTITEM_H
这是我的cpp文件:
#include "lsprolistitem.h"
#include <QListWidgetItem>
LsproListItem::LsproListItem(QString & text, QObject *parent) :
QListWidgetItem(text, parent)
{
}
我没有从我的自定义构造函数中获得参数,以创建一个基于QListWidgetItem的对象。。我尝试创建是这样的:
LsproListItem *simpleText = new LsproListItem("Lorem ipsum");
但这失败了:
appcms.cpp: error : no matching constructor for initialization of 'LsproListItem'
LsproListItem *simpleText = new LsproListItem("Lorem ipsum");
^ ~~~~~~~~~~~~~
lsprolistitem.h:7: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'const char [12]' to 'const LsproListItem' for 1st argument
class LsproListItem : public QListWidgetItem
^
lsprolistitem.h:: candidate constructor not viable: no known conversion from 'const char [12]' to 'QString &' for 1st argument
explicit LsproListItem(QString &text, QObject *parent = 0);
^
快速解决方案(不是最好的):不要使用引用:
public:
explicit LsproListItem(QString text, QObject *parent = 0);
//...
LsproListItem::LsproListItem(QString text, QObject *parent) :
或
public:
explicit LsproListItem( const QString &text, QObject *parent = 0);
//...
LsproListItem::LsproListItem( const QString &text, QObject *parent) :
但还有一个错误。删除Q_OBJECT
宏,因为QListWidgetItem
不是QObject
子类,并且不能在此处使用信号和插槽。
证明:http://qt-project.org/doc/qt-5/qlistwidgetitem.html