(C++ QT)QList只允许附加常量类对象?

col*_*ale 0 c++ qt

我对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));
Run Code Online (Sandbox Code Playgroud)

我的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
Run Code Online (Sandbox Code Playgroud)

我在Qlist追加期间得到的错误

错误:从'const MyInt*'无效转换为'MyInt*'错误:
初始化'void QList :: append(const T&)[with T = MyInt*]'的参数1

如果有人能指出我做错了什么,那就太棒了.

Jas*_* T. 7

所以你创建了一个列表:

QList<MyInt*> myintarray;

然后你试着追加

myintarray.append(new const MyInt(1,"intvar1",&parent));
Run Code Online (Sandbox Code Playgroud)

问题是新的const MyInt正在创建一个const MyInt*,你无法将其分配给MyInt*因为它失去了常量.

您需要更改您的QList以保存const MyInts,如下所示:

QList<const MyInt*> myintarray;

或者您不需要通过将附加更改为:来创建const MyInt*:

myintarray.append(new MyInt(1,"intvar1",&parent));
Run Code Online (Sandbox Code Playgroud)

您将选择的方法取决于您要如何使用QList.如果您不想更改MyInt中的数据,则只需要const MyInt*