繁体   English   中英

在QMap中插入QObject *-无法初始化或传递指针

[英]Inserting QObject * in QMap - cannot initialize or pass the pointer

我设置了两个类, InputFileInputStream 两者都继承QObject ,并使用Q_OBJECT宏进行初始化。

InputFile包含一个QMap<int,InputStream*> ,创建InputStream对象并将其插入QMap

使用显式构造函数初始化InputStream ,然后将其插入到地图中,如下所示:

InputStream myStream = InputStream(this, *myParameter);
_myMap.insert(myInt, *myStream);

编译器返回了一些有关我的插入调用的错误:

/opt/Qt5.5.0/5.5/gcc/include/QtCore/qobject.h:461: error: 'QObject::QObject(const QObject&)' is private
 Q_DISABLE_COPY(QObject)
                ^  

/home/myusername/Documents/Projects/MyProject/inputfile.cpp:17: error: no match for 'operator*' (operand type is 'InputStream')
             _myMap.insert(myInt, *myStream);
                                ^

然后,我尝试将InputStream初始化为指针:

InputStream *myStream = InputStream(this, *myParameter);

在这种情况下,编译器将返回以下错误:

/home/myusername/Documents/Projects/MyProject/inputfile.cpp:16: error: cannot convert 'InputStream' to 'InputStream*' in initialization
             InputStream *myStream = InputStream(this, *myParameter);
                                                                        ^

我也尝试在插入调用中使用引用( & ),但这仍然返回第一个错误。

如何根据需要初始化对象并将其插入QMap

第一个错误意味着您无法复制QObject子类,因此应使用指向它的指针(如开头所述),因此您需要第二种方法,但是却忘记分配内存并构造对象(忘记了new关键字)。 所以只使用:

InputStream *stream = new InputStream(...);

如果_myMap实际上是QMap<int,InputStream*> ,则应仅插入原始指针,而不要插入指针指向的对象:

_myMap.insert(myInt, myStream);

错误消息告诉您不能复制QObject。 是为什么不能复制QObject的说明。

暂无
暂无

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

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