2012-12-02 44 views
0

是否可以使用QPointer和QHash?QPointer到QHash

QPointer<QHash<QString, QPointer<QStringList>> > pHash; 
+0

我应该说代码编译,但我得到奇怪的错误。 – user635818

回答

3

QPointer只能与QObject子类一起使用。因此它不能与QHash或QStringList一起使用,因为它们都不是QObject的。如果上面的代码为你编译,那可能是因为你没有使用pHash?甚至初始化这样的QPointer,例如

QPointer<QHash<QString, QString> > foo(new QHash<QString, QString>()); 

给出类似以下(GCC)的错误:

error: cannot convert ‘QHash<QString, QString>*’ to ‘QObject*’ in initialization 

如果你真的需要(智能)指针容器,尽量QSharedPointer,不需要所包含的对象是任何具体类型。 虽然通常在堆栈上创建容器,但在堆上创建容器在几乎所有情况下都是单向的并且是不必要的。 Qt的容器是implicitly shared,因此复制它们很便宜。

+0

+1用于发现'QPointer'只能与'QObject'一起使用。对于'QSharedPointer'替代品+1。而+1用于发现容器隐式共享:)。 –

+0

是的,这是当我尝试使用pHash我得到的错误。非常感谢您的好回答和替代方案。 – user635818