首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将“QScopedPointer<T>”转换为“QStandardItem*”

无法将“QScopedPointer<T>”转换为“QStandardItem*”
EN

Stack Overflow用户
提问于 2014-08-12 04:33:57
回答 2查看 617关注 0票数 1

我使用此代码时没有任何错误。

代码语言:javascript
复制
QStandardItem *newRow;
newRow = new QStandardItem(hostname);
model2->setItem(index, 2, newRow);

我想将上面的代码更改为:

代码语言:javascript
复制
QScopedPointer<QStandardItem> newRow(new QStandardItem);
model2->setItem(index, 2, newRow);

但我知道这个错误:

代码语言:javascript
复制
C:\...\mainwindow.cpp:352: error: C2664: 'void QStandardItemModel::setItem(int,int,QStandardItem *)' : cannot convert parameter 3 from 'QScopedPointer<T>' to 'QStandardItem *'
with
[
    T=QStandardItem
]
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

我怎样才能解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-12 05:08:04

尝试以下操作,使用get ()方法获取指针。

在我的电脑上

代码语言:javascript
复制
QStandardItem *item2 = new QStandardItem("foo");
       model->setItem(4,0,item2);//works

QScopedPointer<QStandardItem> newRow(new QStandardItem("foo"));
       model->setItem(4,0,newRow.take());//works too
票数 2
EN

Stack Overflow用户

发布于 2014-08-12 08:34:00

与释放范围指针容器存储的指针的QScopedPointer<T>::take()不同,我建议使用QScopedPointer<T>::data(),它返回指针,但不重置范围指针

但是另一方面,为什么要使用QScopedPointer来存储指向QStandardItem的指针,而模型将拥有它的所有权并处理它的生命周期?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25256220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档