2011-04-06 39 views

Respuesta

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

La cosa de foreach es totalmente diferente, creo.

Si quieres más información sobre esto, mira esto
http://doc.qt.digia.com/4.2/containers.html#the-foreach-keyword
abajo desplazarse a donde se habla de la palabra clave foreach.

gracias

especial a Tomalak Geret'kal para añadir los caracteres propios que mi teclado es incapaz de producir :)


Debido a tantas upvotes sobre esto, voy a explicar la macro foreach aquí también.

foreach es una adición de C++ específica de Qt, implementada con el preprocesador. Si desea desactivar la cosa, simplemente agregue CONFIG + = no_claves a su archivo XX.pro.

Qt realiza una copia de la lista que se repite, pero no se preocupe por el rendimiento. Los contenedores Qt utilizan el uso compartido implícito, donde los contenidos reales no se copian. Piense en ello como dos variables de referencia que usan la misma variable real. Esto hace posible modificar la lista sobre la que está iterando, sin estropear el bucle. Tenga en cuenta que la modificación de la lista obliga a Qt a hacer una copia del contenido real de la lista la primera vez que se modifica.

foreach se puede utilizar para recorrer todos los contenedores Qt básicos, QList QVector QMap QMultiMap y más. QListWidget no es uno de estos, por lo que no funciona, lamentablemente. Para empeorar las cosas, QListWidget no proporciona una lista de todos los elementos, solo los seleccionados. Hay un método llamado artículos, que parece ser bueno, pero está protegido.

para recorrer los elementos seleccionados, creo que esto funcionaría

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

FYI las entidades son '<' y '>', _con los puntos y coma_. –

+0

Tomalak, gracias, pero te perdiste 1 :) – 0xbaadf00d

+0

@justanothercoder: Sólo te estoy probando; P –

1

El first Google result para "QWidgetList" me dijo how to do it.

Puede usar un iterador 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 
} 

no estoy muy seguro de dónde proviene de esta foreach. Si Qt no lo proporciona, puede ser una macro expandiéndose al BOOST_FOREACH, para lo cual deberá incluir boost/foreach.hpp.

+0

foreach es una macro Qt proporciona en http://doc.qt.nokia.com/latest/qtglobal.html –

+0

@Arnold: Genial, gracias –

+1

no hay QWidgetListIt en Qt 4.7 – user63898

Cuestiones relacionadas