QTableView: как установить столбец поиска

Я использую QTableView и подкласс QAbstractTableModel в качестве модели. Я видел, что (по умолчанию), когда пользователь что-то вводит, QTableView начинает искать набранный текст в первом столбце и прокручивает представление до соответствующего элемента. Это то, что я хотел, но не в первой колонке. Я не могу найти способ сказать (код) QTableView или QAbstractTableModel, который является «столбцом поиска». Любая идея?

Спасибо


person Luca    schedule 27.07.2011    source источник


Ответы (2)


QTableView обычно ищет в столбце, который в данный момент находится в фокусе. Просто щелкните ячейку в столбце, в котором вы хотите выполнить поиск, и начните печатать.

[Изменить:]
Что касается вашего комментария: вы можете установить любую ячейку в активную ячейку, используя

QTableView* tableView = /* whatever */;
tableView->setCurrentIndex( const QModelIndex& index )

Это также выделит ячейку. Если вы этого не хотите, вы можете сделать

QModelIndex index = /* whatever */;
tableView->selectionModel()->setCurrentIndex( index, QItemSelectionModel::NoUpdate );

Если у вас есть слоты, подключенные к вашим текущим сигналам [Row|Column]Changed или selectionChanged в табличном представлении selectionModel(), вы можете сделать следующее, в зависимости от вашего кода:

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 );
person Tim Meyer    schedule 27.07.2011

Я нашел это решение:

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, это не сработает :(

person Luca    schedule 28.07.2011
comment
Проверьте мой отредактированный ответ, возможно, treeView->selectionModel()->setCurrentIndex(...) тоже сработает. Однако я не могу сказать, допускает ли древовидное представление тот же поиск с клавиатуры, что и табличное представление. - person Tim Meyer; 28.07.2011
comment
Да, я проверил, и treeView->selectionModel()->setCurrentIndex(...) тоже сработало (и имеет больше опций). Спасибо!! - person Luca; 29.07.2011