尝试向QString添加功能但是会出现构建错误?如果我错过了什么?
#ifndef CSTRING_H
#define CSTRING_H
#include <QString>
#include <QStringList>
#include <QObject>
class CString : public QString, public QObject
{
Q_OBJECT
public:
explicit CString(QObject *parent = 0);
QStringList Find(QString qstrSearch);//all occurances
signals:
public slots:
};
#endif // CSTRING_H
#include "cstring.h"
CString::CString(QObject *parent) :
QString(parent) //ERROR IS POINTING TO HERE
{
}
QStringList Find(QString qstrSearch)//all occurances
{//indexOf, contains
QStringList qstrList;
return qstrList;
}
答案 0 :(得分:2)
QString(parent)
Qstring没有将QObject-parent作为参数的构造函数。因此,编译器会尝试将您的QObject强制转换为最接近的匹配构造函数,这可能是QString ( QChar ch )
答案 1 :(得分:2)
您应该在此使用合成而不是继承,因为QString
不是为子类设计的。如果你将它分类,你可能会遇到很多麻烦
做这样的事情:
class CString : public QObject //if you're really need this class to be QObject, that's not always a good idea
{
Q_OBJECT
public:
explicit CString(QObject *parent = 0) :
QObject(parent),
mString() //QString have no constructors with parameter QObject*...
{
}
private:
QString mString;
}
当然,实现应该在cpp文件中,它只是一个简短的例子
答案 2 :(得分:2)
不要从QString
派生类,因为它没有考虑到多态性(请注意,它没有虚拟方法,特别是没有虚拟析构函数)如果要提供新的实用程序函数,只需使用自由函数 - 您可能希望将它们放在命名空间中:
namespace CString {
QStringList find(const QString &search);
}