2014-12-03 76 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

相关问题