我使用 QTableView 和 QAbstractTableModel 的子类作为其模型。我看到(默认情况下)当用户键入某些内容时,QTableView 开始在第一列中搜索键入的文本并将视图滚动到匹配的元素。这是我想要的,但不是在第一列。我找不到告诉(代码)QTableView 或 QAbstractTableModel 哪个是“搜索列”的方法。任何的想法?
谢谢
我使用 QTableView 和 QAbstractTableModel 的子类作为其模型。我看到(默认情况下)当用户键入某些内容时,QTableView 开始在第一列中搜索键入的文本并将视图滚动到匹配的元素。这是我想要的,但不是在第一列。我找不到告诉(代码)QTableView 或 QAbstractTableModel 哪个是“搜索列”的方法。任何的想法?
谢谢
QTableView 通常在当前具有焦点的列中进行搜索。只需单击要搜索的列中的单元格并开始输入。
[编辑:]
关于您的评论:您可以使用将任何单元格设置为活动单元格
QTableView* tableView = /* whatever */;
tableView->setCurrentIndex( const QModelIndex& index )
这也将选择单元格。如果你不想那样,你可以这样做
QModelIndex index = /* whatever */;
tableView->selectionModel()->setCurrentIndex( index, QItemSelectionModel::NoUpdate );
如果您有插槽连接到表视图的 selectionModel() 的 current[Row|Column]Changed 或 selectionChanged 信号,您可能需要执行以下操作,具体取决于您的代码:
QTableView* tableView = /* whatever */;
QModelIndex index = /* current row, whatever column you want to search in */;
QItemSelectionModel* selectionModel = tableView->selectionModel();
// probably check for a NULL pointer? - not really sure if this is possible
bool signalsWereBlocked = selectionModel->blockSignals( true );
selectionModel->setCurrentIndex( index );
selectionModel->blockSignals( signalsWereBlocked );
我找到了这个解决方案:
QAbstractItemModel *model = myTableView->model();
QModelIndex index = model->index( 0, SearchColumn ); // whatever column you want to search in
myTableView->setCurrentIndex(index);
//now SearchColumn has focus and future search will operate in this column
但是如果我使用 QTreeView 而不是 QTableView 它不起作用:(