2

モデルとしてQTableViewとQAbstractTableModelのサブクラスを使用しています。ユーザーが何かを入力すると、(デフォルトで)QTableViewが最初の列に入力されたテキストの検索を開始し、一致する要素までビューをスクロールすることを確認しました。これは私が欲しかったものですが、最初の列にはありません。「検索列」であるQTableViewまたはQAbstractTableModelを(コード化して)伝える方法が見つかりません。何か案が?

ありがとうございました

4

2 に答える 2

2

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 );
于 2011-07-27T09:53:42.950 に答える
1

私はこの解決策を見つけました:

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

しかし、QTableViewの代わりにQTreeViewを使用すると、機能しません:(

于 2011-07-28T02:25:45.637 に答える