1

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

QStandardItem *newRow;
newRow = new QStandardItem(hostname);
model2->setItem(index, 2, newRow);

我想将上面的代码更改为以下内容:

QScopedPointer<QStandardItem> newRow(new QStandardItem);
model2->setItem(index, 2, newRow);

但我得到这个错误:

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

我该如何解决这个问题?

4

2 回答 2

2

试试这个,使用 take() 方法来获取指针。

在我的电脑上

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
于 2014-08-12T05:08:04.837 回答
1

而不是QScopedPointer<T>::take()释放作用域指针容器的存储指针,我建议使用QScopedPointer<T>::data()它返回指针但不重置作用域指针

但另一方面,你为什么要使用QScopedPointer一个指针来存储QStandardItem模型何时获得它的所有权并处理它的生命周期?

于 2014-08-12T08:34:00.183 回答