我对QT很新。我已经搞了一个星期了。当我尝试将自定义数据类型添加到Qlist时,我遇到了一个错误
QObject parent;
QList<MyInt*> myintarray;
myintarray.append(new const MyInt(1,"intvar1",&parent));
myintarray.append(new const MyInt(2,"intvar2",&parent));
myintarray.append(new const MyInt(3,"intvar3",&parent));
我的MyInt类是int的简单包装器,看起来像这样
#ifndef MYINT_H
#define MYINT_H
#include <QString>
#include <QObject>
class MyInt : public QObject
{
Q_OBJECT
public:
MyInt(const QString name=0, QObject *parent = 0);
MyInt(const int &value,const QString name=0, QObject *parent = 0);
MyInt(const MyInt &value,const QString name=0,QObject *parent = 0);
int getInt() const;
public slots:
void setInt(const int &value);
void setInt(const MyInt &value);
signals:
void valueChanged(const int newValue);
private:
int intStore;
};
#endif
我在Qlist追加期间得到的错误
错误:来自'const的无效转换 MyInt *'到'MyInt *'错误:
初始化'void的参数1 QList :: append(const T&amp;)[与T = 敏*]“
如果有人能够指出我做错了什么,那就太棒了。
答案 0 :(得分:7)
所以你创建了一个列表:
QList<MyInt*> myintarray;
然后你试着追加
myintarray.append(new const MyInt(1,"intvar1",&parent));
问题是新的const MyInt正在创建一个const MyInt *,你无法将其分配给MyInt *,因为它会丢失常量。
您需要更改QList以保持const MyInts,如下所示:
QList<const MyInt*> myintarray;
或者您不需要通过将附加更改为:
来创建const MyInt *myintarray.append(new MyInt(1,"intvar1",&parent));
您将选择的方法取决于您想要如何使用QList。如果您不想更改MyInt中的数据
,则只需要const MyInt *答案 1 :(得分:3)
您需要使用:
QList<const MyInt*> myintarray;
答案 2 :(得分:0)
编译器现在告诉您所需要的一切 - 您尝试将const T*
存储为T*
,而const T*
到T*
的隐式转换不是允许。
在const
时,请忽略append()
。
答案 3 :(得分:0)
我会说你应该将常规的MyInt *传递给QList :: append。 “const T&amp;”指的是指针类型 - QList承诺不会重新分配你提供的指针。