繁体   English   中英

(C ++ QT)QList仅允许追加常量类对象?

[英](C++ QT) QList only allows appending constant class objects?

我对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 QList :: append(const T&)[with T = MyInt *]”的参数1

如果有人能指出我在做什么错,那将是很棒的。

因此,您创建了以下列表:

QList<MyInt*> myintarray;

然后您稍后尝试附加

myintarray.append(new const MyInt(1,"intvar1",&parent));

问题是新的const MyInt正在创建const MyInt *,您不能将其分配给MyInt *,因为它会失去constness。

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

QList<const MyInt*> myintarray;

或者您不需要通过将追加更改为以下内容来创建const MyInt *:

myintarray.append(new MyInt(1,"intvar1",&parent));

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

您将需要使用:

   QList<const MyInt*> myintarray;

编译器告诉您现在需要做的所有事情-您试图将const T*存储为T*并且不允许从const T*T*隐式转换。
只需在append()时省略const

我会说您应该将常规MyInt *传递到QList :: append中。 “ const T&”表示指针类型-QList承诺不会重新分配您提供的指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM