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 に答える