2012-08-31 17 views
10

En CSharp su tan simple como la escritura:¿Cómo puedo iterar a través de elementos de QListWidget y trabajar con cada elemento?

listBox1.Items.Add("Hello"); 
listBox1.Items.Add("There"); 

foreach (string item in listBox1.Items) 
{ 
    MessageBox.Show(item.ToString()); 
} 

y puedo añadir fácilmente diferentes objetos a un cuadro de lista y luego recuperarlos usando foreach. He probado el mismo enfoque en Qt 4.8.2, pero parece que están different.though tienen un aspecto muy similar en first.i encontró que Qt soporta foreach así que fui y traté de algo como:

foreach(QListWidgetItem& item,ui->listWidget->items()) 
{ 
    item.setTextColor(QColor::blue()); 
} 

cuales falló claramente. Dice que los elementos() necesitan un parámetro que me confunde. Estoy tratando de iterar a través del ListBox mismo, entonces, ¿qué significa esto? Traté de pasar el objeto ListBox como el parámetro de sí misma, esta vez falló también:

foreach(QListWidgetItem& item,ui->listWidget->items(ui->listWidget)) 
{ 
    item.setTextColor(QColor::blue()); 
} 

Así que aquí están mis preguntas:

  • ¿Cómo puedo iterar a través de un artículo en QListWidget en Qt?
  • ¿Puedo almacenar objetos como elementos en QListWidgets como C#?
  • ¿Cómo puedo convertir un objeto en QListWidgets en una cadena (parte del contador ToString de C# en Qt)?

(supongamos que quiero usar un QMessagBox en lugar de que SetTextColor y desea imprimir todos los elementos de cadena en la QlistWidget.)

Respuesta

26

No creo que la items function hace lo que usted cree. Parece que es para decodificar datos MIME, no para obtener una lista de todos los elementos en el widget.

En realidad, no veo ninguna función para hacer exactamente lo que quiere, por desgracia. Probablemente se podría utilizar findItems como una solución, pero que parece fea, si no francamente abusiva ... Por lo menos todavía se puede utilizar el item function con buenos for bucles - no están que mucho más escribiendo:

for(int i = 0; i < listWidget->count(); ++i) 
{ 
    QListWidgetItem* item = listWidget->item(i); 
    //Do stuff! 
} 

Espero que ayude!

+2

Gracias por esto. Es desafortunado que Qt decidió crear un método de clase de elementos que no devuelva una colección de QListWidgetItems como uno esperaría con un método de clase de elementos para cualquier otra biblioteca de desarrollo. Confuso y torpe Quiero decir, ¿por qué alardear de un foreach() en Qt cuando ni siquiera proporcionan una forma de iterar los subelementos de este widget con él? – Volomike

2

Intente hacer un puntero a cada uno de los elementos si está haciendo los elementos de la lista en el código. Pero, si está utilizando el archivo .ui para hacer un elemento de la lista, intente hacer clic con el botón derecho sobre él y presionar Editar hoja de estilo. Puede editarlo muy fácilmente de esa manera.

1

se puede hacer algo como esto:

for(int i = 0; i < listWidget->count(); ++i) 
{ 
    QString str = listwidget.item(i)->text(); 
    //Do stuff! 
} 
Cuestiones relacionadas