2012-08-31 8 views
10

In CSharp sua semplice come scrittura:Come posso scorrere gli elementi di QListWidget e lavorare con ciascun elemento?

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

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

e posso facilmente aggiungere diversi oggetti a una casella di riepilogo e poi recuperarli utilizzando foreach. ho provato lo stesso approccio in Qt 4.8.2, ma sembra che stanno different.though sembrano molto simili a first.I scoperto che Qt supporta foreach così sono andato su e ho cercato qualcosa di simile:

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

che fallito chiaramente. Dice che items() ha bisogno di un parametro che mi confonde. Sto provando a scorrere il ListBox stesso, quindi cosa significa? ho provato passando l'oggetto ListBox come parametro per sé di nuovo fallito anche:

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

Così qui sono le mie domande:

  • Come posso scorrere un articoli QListWidget in Qt?
  • Posso archiviare oggetti come elementi in QListWidgets come C#?
  • Come posso convertire un oggetto in QListWidgets in stringa (parte contatore C# s ToString in Qt)?

(Supponiamo che io voglio usare un QMessagBox al posto di quella SetTextColor e vogliono stampare tutti gli elementi stringa nel QlistWidget.)

risposta

26

Non credo che il items function fa quello che pensi lo fa. Sembra che sia per decodificare i dati MIME, non ottenere un elenco di tutti gli elementi nel widget.

In realtà non vedo alcuna funzione per fare esattamente quello che vuoi, purtroppo. Probabilmente si potrebbe usare findItems come soluzione alternativa, ma che sembra brutto, se non addirittura abusivo ... Almeno si può ancora usare il item function con il buon vecchio for loop - sono non che molto di più di battitura:

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

Spero che questo aiuti!

+2

Grazie per questo. È un peccato che Qt abbia deciso di creare un metodo di classe items che non restituisca una collezione di QListWidgetItems come ci si aspetterebbe con un metodo di classe items per qualsiasi altra libreria di sviluppo. Confuso e goffo. Voglio dire, perché vantarsi di un foreach() in Qt quando non forniscono nemmeno un modo per iterare i sottotemi di questo widget con esso? – Volomike

2

Provare a fare un puntatore a ciascuno degli elementi se si stanno creando gli elementi di elenco nel codice. Tuttavia, se si utilizza il file .ui per creare un elemento della lista, provare a fare clic con il pulsante destro del mouse e toccare il foglio di stile di modifica. Puoi modificarlo molto facilmente in questo modo.

1

si può fare qualcosa di simile:

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