如何在Qt中进行子类化



我想对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

相关内容

  • 没有找到相关文章

最新更新