2014-10-28 3 views
1

У меня есть следующий код:Я хочу, чтобы сделать петлю с помощью итератора способом, но есть ошибка

QList<QTreeWidgetItem *> selectedItems = ui->treeWidget->selectedItems(); 
for(QList<QTreeWidgetItem>::iterator i = selectedItems.begin(); i != selectedItems.end(); i++){ 
    qDebug() << i; 
} 

Но есть ошибка:
conversion from 'QList<QTreeWidgetItem*>::iterator' to non-scalar type 'QList<QTreeWidgetItem>::iterator' requested

+3

попробовать 'QList :: iterator i' – genisage

ответ

3

Вы пробовали QList<QTreeWidgetItem *>::iterator?

+0

Спасибо, я уже пытался использовать 'QList ', но я забыл изменить 'qDebug() << i;' на 'qDebug() << * i;'. Я потерял свое внимание. –

3

Ваш код, кажется, содержит различные типы называют, а именно:

QList<QTreeWidgetItem *> selectedItems = ui->treeWidget->selectedItems(); 
        ^ 

for(QList<QTreeWidgetItem>::iterator i = selectedItems.begin(); i != selectedItems.end(); i++) 
         ^

Вы можете видеть, что вы используете указатель в первом случае, но не последний. Это то, что компилятор пытается вам написать. Вам потребуется два изменения для решения этой проблемы:

for (QList<QTreeWidgetItem*>::iterator i = selectedItems.begin(); i != selectedItems.end(); ++i) 
//     ^
    qDebug() << *i; // Need to change to dereference, respectively 

Вы можете точно также использовать конструкцию Еогеасп следующим образом, как это немного короче, писать и понимать:

foreach (QTreeWidgetItem* item, selectedItems) 
    qDebug() << item; 
+0

Благодарим вас за ответ '+ 1' за ваш ответ. –