QTableView:如何设置搜索列

发布于 2024-11-26 13:12:27 字数 203 浏览 0 评论 0原文

我使用 QTableView 和 QAbstractTableModel 的子类作为其模型。 我看到(默认情况下)当用户键入某些内容时,QTableView 开始搜索第一列中键入的文本并将视图滚动到匹配元素。这是我想要的,但不在第一栏中。 我找不到一种方法来告诉(代码)QTableView 或 QAbstractTableModel 哪个是“搜索列”。 有什么想法吗?

谢谢

I'm using a QTableView and a subclass of QAbstractTableModel as its model.
I saw that (by default) when the user types something the QTableView start searching the typed text in the first column and scroll the view to the matching element. This is what I wanted but not in the first column.
I cannot find a way to tell (code) QTableView or QAbstractTableModel which is the "search column".
Any idea?

Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

岛歌少女 2024-12-03 13:12:27

QTableView通常在当前具有焦点的列中搜索。只需单击要搜索的列中的单元格并开始输入即可。

[编辑:]
关于您的评论:您可以使用将任何单元格设置为活动单元格

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

这也将选择该单元格。如果您不希望这样做,您可以执行

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

如果您有插槽连接到表视图的selectionModel()的当前[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 );

QTableView usually searches in the column that currently has focus. Just click into a cell in the column you want to search at and start typing.

[Edit:]
Regarding your comment: You can set any cell to the active cell using

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

This will also select the cell. If you don't want that, you can do

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

If you have slots connected to your current[Row|Column]Changed or selectionChanged signals of the table view's selectionModel(), you might wanna do the following, dependent on your code:

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 );
耶耶耶 2024-12-03 13:12:27

我找到了这个解决方案:

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 它不起作用:(

I found this solution:

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

But if I use a QTreeView instead of a QTableView it doesn't work :(

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文