2011-04-06 71 views

回答

9
int count = listWidget->count(); 
for(int index = 0; 
    index < count; 
    index++) 
{ 
    QListWidgetItem * item = listWidget->item(index); 
    // A wild item has appeared 
} 

foreach事情是完全不同的,我認爲。

如果您想對更多的信息,看看這個
http://doc.qt.digia.com/4.2/containers.html#the-foreach-keyword
向下滾動到它談論的foreach關鍵字。


特別感謝託默勒格Geret'kal添加適當的字符,我的鍵盤不能產生:)


由於對這個這麼多upvotes,我將解釋的foreach宏這裏也是如此。

foreach是一個Qt特定的C++添加,使用預處理器實現。如果你想禁用這個東西,只需在你的XX.pro文件中添加CONFIG + = no_keywords即可。

Qt製作了一個被迭代的副本,但不用擔心性能。 Qt容器使用隱式共享,其中實際內容不被複制。把它看作使用相同實際變量的兩個參考變量。這使得修改你正在迭代的列表成爲可能,而不會搞亂循環。請注意,修改列表將強制Qt在第一次修改列表時對列表的實際內容進行復制。

foreach可以用來遍歷所有Qt基本容器,QList QVector QMap QMultiMap等等。 QListWidget不是其中之一,所以它不起作用,可悲的是。更糟糕的是,QListWidget沒有提供所有項目的列表,只有選中的項目。有一種稱爲物品的方法,這看起來很不錯,但受到保護。

要遍歷所有選定的項目,我想這會工作

foreach(QListWidgetItem * item, listWidget->selectedItems()) 
{ 
    // A wild item has appeared 
} 
+1

僅供參考,實體是'<'和'>',_帶有分號_。 – 2011-04-07 09:19:44

+0

託默勒格,謝謝,但是你錯過了1 :) – 0xbaadf00d 2011-04-07 09:19:49

+0

@justanothercoder:只是在試探你,P – 2011-04-07 09:20:46

1

first Google result爲「QWidgetList」告訴我how to do it

您可以使用QWidgetListIt迭代器。

QWidgetList wl = get_some_widget_list(); 

for (QWidget* w = wl.first(); w != 0; w = wl.next()) { 
    // use w 
} 

// or 

foreach (QWidget* w, wl) { 
    // use w 
} 

我不太確定這個foreach來自哪裏。如果它不是由Qt提供的,它可能是一個擴展到BOOST_FOREACH的宏,爲此您需要包含boost/foreach.hpp

+0

的foreach在 http://doc.qt.nokia.com/latest/qtglobal.html – 2011-04-06 15:55:26

+0

@Arnold提供Qt的宏:太好了,謝謝 – 2011-04-06 15:57:18

+1

Qt 4.7中沒有QWidgetListIt – user63898 2011-04-07 08:44:14