2014-12-03 109 views

回答

1

您可以使用此禁用的選擇:

connect(ui->tableView->selectionModel(),&QItemSelectionModel::selectionChanged,[=]() {//with lambda 
    if(ui->tableView->selectionModel()->selectedIndexes().size() > 1) 
     ui->tableView->setSelectionMode(QAbstractItemView::NoSelection); 
}); 

我這裏使用的C++11CONFIG += c++11.pro文件)和new syntax of signals and slots,當然,如果你願意,你可以使用舊的語法。

但在此情況下,此用戶將無法使用選擇。如果這是你想要的,那就沒問題。如果不是,那麼您可以啓用選擇,例如當tableView失去焦點或爲此提供特殊按鈕時。

但我也認爲,下一個代碼是更適合你:

connect(ui->tableView->selectionModel(),&QItemSelectionModel::selectionChanged,[=]() {//with lambda 
    if(ui->tableView->selectionModel()->selectedIndexes().size() > 2) 
    { 
     QList<QModelIndex> lst = ui->tableView->selectionModel()->selectedIndexes(); 
     ui->tableView->selectionModel()->select(lst.first(),QItemSelectionModel::Deselect); 
    } 
}); 

它能做什麼?當用戶嘗試選擇2個以上的項目時,最後選擇的項目取消選擇,用戶根本不能選擇2個以上的項目,僅選擇最後選擇的+。我不知道你的任務的規格,所以選擇最合適的方法。

+0

謝謝切爾諾貝利,我用你的第二個解決方案,我用「lst.last()」替換了「lst.first()」。 它正是我所期待的。 但是,我想知道是否有任何特定的原因爲什麼沒有這樣的方法 作爲QTableView :: set_Max_Number_SelectedItems(int).. – 2014-12-03 15:43:51

+0

@ jp_doyon1 Qt是一個強大的工具,但它不能也不應該包含絕對一切。有時候我們應該搜索一下如何完成某項任務。 – Chernobyl 2014-12-03 15:47:28

相關問題