2012-08-31 62 views
10

在CSHARP它的那樣簡單書面方式:如何迭代QListWidget項目並處理每個項目?

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

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

,我可以在不同的對象列表框輕鬆添加,然後使用的foreach檢索。 我想同樣的方法在Qt的4.8.2,但似乎他們different.though他們看first.I非常相似的發現,Qt支持的foreach所以我去,並試圖 類似:

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

這它說items()需要一個讓我困惑的參數。我試圖迭代ListBox本身,那麼這是什麼意思? 我試圖傳遞ListBox對象作爲參數本身這又失敗過:

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

因此,這裏是我的問題:

  • 我怎樣可以通過Qt的一個QListWidget項目重複?
  • 可以將對象存儲爲QListWidgets(如C#)中的項目嗎?
  • 如何將QListWidgets中的對象轉換爲字符串(C#中的ToString計數器部分在Qt中)?

(假設我想使用一個QMessagBox而不是setTextColor,並希望打印出QlistWidget所有的字符串項。)

回答

26

我不認爲items function做什麼,你認爲它。這聽起來像是解碼MIME數據,而不是獲取小部件中所有項目的列表。

不幸的是,我實際上沒有看到任何功能去做你想要的東西。你也許可以使用findItems作爲一種解決方法,但似乎難看,如果不是徹頭徹尾的濫用......至少,你仍然可以使用item function用好老for循環 - 他們不是更打字:

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

希望有幫助!

+2

感謝。不幸的是,Qt決定創建一個不會返回QListWidgetItems集合的項目類方法,就像其他開發庫的items類方法所期望的那樣。令人困惑和笨拙。我的意思是,爲什麼在Qt中吹噓foreach()時他們甚至沒有提供一種方法來迭代這個小部件的子項? – Volomike

2

如果您在代碼中創建列表項,請嘗試製作指向每個項目的指針。但是,如果您正在使用.ui文件創建列表項,請嘗試右鍵單擊它並點擊編輯樣式表。您可以非常容易地編輯它。

1

你可以做這樣的事情:

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