1.問題描述,QtableWidget、QlistWidget、QTreeWidget 設置單選行模式時,就會一直選中一行,無法取消選中行,恢復全不選的狀態;點擊空白處,也不會取消選中行;多行選擇模式,可以取消選中行;
2.解決辦法
網上看到一個用多行選中,代替單行選中的方法,就是多行選中變化時,取消其他的選中;保持只有單行選中;
如果是單行選中模式要怎麼處理呢,下面以QTreeWidget爲例來說明;
(1)QtreeWidget屬性設置,單選模式,選中行爲是選中行;
(2)定義一個當前的選中成員變量保存選中的item;
QTreeWidgetItem* m_pCurrentItem=NULL;
(3)QTreeWidgetItem::itemcliecked響應函數,判斷之前選中的是否是同一個item,如果是則取消,如果不是則設置選中;;
connect(ui.treeWidget, &QTreeWidget::itemClicked, [=](QTreeWidgetItem *item, int column) { if (m_pCurrentItem ==ui.treeWidget->currentItem()) { ui.treeWidget->setItemSelected(item, false); m_pCurrentItem = NULL; } else { ui.treeWidget->setItemSelected(item, true); m_pCurrentItem = item; } });