2016-05-11 17 views
0

QTableViewを以下のように作成し、デフォルトアイテムとしてトップアイテムを選択したいとします。QTableViewのトップアイテムの選択方法

D-> UI->のプロジェクトは私QTableViewを表し注こと
proxyModel = new QSortFilterProxyModel(this); 
    proxyModel->setSourceModel(d->model); 

    d->ui->projects->setModel(proxyModel); 
    d->ui->projects->setSortingEnabled(true); 
    proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive); 
    proxyModel->setFilterKeyColumn(-1); 

    connect(d->ui->projects->model(),SIGNAL(dataChanged(QModelIndex,QModelIndex)),d,SLOT(selectTopOne())); 
connect (d->ui->search_phrase, SIGNAL(textChanged(QString)), 
       proxyModel, SLOT(setFilterWildcard(QString))); 

。 &d-> ui-> projectsは、検索文字列を取得するテキスト編集用です。

私は、dataChanged信号でスロットselectTopOneを呼び出して、自分のテーブルビューの一番上の項目を選択しようとしました。しかし、それはスロットを求めていません。

そして、私はQmodelindex(0,0)で行を選択しようとしました。しかしそれはあまり働かなかった。

編集:

これは、現在のQTableviewの表示方法です。

enter image description here

これは私がする必要がどのようなものです。私は最初の行を自動的に選択する必要があります。

enter image description here

フィルタQTableviewのトップ項目のテキスト編集によります。私はその時にトップアイテムを選択したい。

enter image description here

+0

「selectTopOne()」が呼び出されていますか? – Apin

+0

SLOTであり、モデルのdataChanged SIGNALに接続されています。私はコードをデバッグします。しかし、selectTopOne()内のブレークポイントはヒットしません。 –

+0

あなたのselectTopOneが起動されないという問題が発生します。 d-> ui->プロジェクトタイプ(テキストフィールドだと言いましたが、テキストフィールドは正確に何か分かりません)とは何ですか? – Apin

答えて

0

は、なぜあなたはデフォルトの選択を設定する項目DataChange()信号を使用していますか?プログラムを起動するときに、デフォルトでトップアイテムを選択したいと思っていますか?あなたは、たとえば、選択モデルを使用することができます。

d->ui->projects->selectionModel()->select(d->ui->projects->model()->index(0,0), QItemSelectionModel::Select); 

をYOUR編集した後:

OKが、私はそれを持っています。決定は例えばQSortFilterProxyModelクラスからの継承です。そこでは、setFilterRexExp()(おそらく他のもの)のQLineEditのテキストを変更するときに使用されるいくつかのSLOTを使用することができます。その後、このSLOTからSIGNALを送信して、メインクラスからキャッチして、upperメソッドを呼び出して、最初のアイテムを選択します。または、モデルインデックスのデータを使用しない場合:

d->ui->projects->setCurrentIndex(d->ui->projects->model()->index(0,0)); 
+0

Becozユーザーからの入力に従って、プロジェクトをフィルタリングするときに一番上の項目を選択したいと思います。 –

1

この回答がお役に立てば幸いです。

ui.tableView->selectRow(0); 
ui.tableView->setFocus(); 
関連する問題