2011-04-06 76 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