モデルとして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
しかし、QTableViewの代わりにQTreeViewを使用すると、機能しません:(