2014-10-29 33 views
2

您可以通過單擊標籤字符串來切換QCheckBox。這給用戶一個舒適的大目標點擊。Qt - 如何通過單擊文本來切換QListWidgetItem

但是,如果我有一個QListWidget與可檢查的項目,用戶必須單擊小框內切換項目。這使得檢查項目單調乏味,甚至對於我們這些有重複性壓力傷害的人來說有點痛苦。

我試圖連接到QListWidget itemClicked信號和切換項目複選框。如果用戶點擊項目文本,那工作正常。但是,如果他們真的點擊了框,檢查狀態會被切換,然後發送itemClicked信號,代碼會將檢查狀態切換回原來的位置。

任何人都可以通過點擊複選框或項目文本來提示切換檢查狀態嗎?

謝謝...

回答

1

QListWidgetItem不提供任何辦法知道在哪裏的用戶點擊,標籤或盒子,所以最簡單的方法是使用QCheckBox作爲一個小部件。現在QCheckBox將表現爲QCheckBox和用戶將能夠通過點擊到處複選框(在QCheckBox

for(int r=0;r<7;r++) 
{ 
    QListWidgetItem* lwi = new QListWidgetItem; 
    ui->listWidget->addItem(lwi); 
    ui->listWidget->setItemWidget(lwi, new QCheckBox(QString("checkBox%1").arg(r))); 
} 

缺點:如果你有很多的項目則會降低性能。

+0

謝謝@Chernobyl。我想我過去曾經在設置項目小部件時知道。我會試一試我的短名單。不太清楚我處理的架構圖可以有100個圖層名稱...... – 2014-10-31 16:42:01

2

您可以保持標記Qt::ItemIsUserCheckable未設置,然後當點擊複選框時,項目的檢查狀態不會改變。當QListWidgetitemClicked信號連接到切換檢查狀態的插槽時,檢查狀態將不再被切換兩次。

當項目設置了檢查狀態時,無論用戶是否可以檢查,都會顯示這些項目的複選框。

相關問題