2016-05-11 14 views
0

Ich habe QTableView wie folgt erstellt und möchte das oberste Element als Standardauswahl auswählen.So wählen Sie das oberste Element von 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))); 

Beachten Sie, dass d-> UI-> Projekte meine QTableView darstellt. und d-> ui-> Projekte ist Text bearbeiten verwenden, um Suchzeichenfolge zu greifen.

Ich habe versucht, oberste Element meiner Tabellenansicht auszuwählen, indem ich Slot selectTopOne über das dataChanged-Signal aufruft. Aber es ruft nicht nach Slot.

Und ich habe versucht, Zeile mit Qmodelindex (0,0) zu wählen. Aber es hat auch nicht funktioniert.

EDIT:

Dieses ist, wie mein QTableView jetzt erscheint.

enter image description here

Dieses ist, was ich tun muss. Ich muss die erste Zeile automatisch auswählen.

enter image description here

Nach dem Text Edit auf Artikel von QTableView gefiltert. Ich möchte zu diesem Zeitpunkt auch den Top-Artikel auswählen.

enter image description here

+0

Sind Sie sicher, dass Ihr "selectTopOne()" aufgerufen wird? – Apin

+0

Es ist ein SLOT und mit DataChanged SIGNAL des Modells verbunden. Ich debugge den Code. Aber Breakpoint innerhalb von selectTopOne() nicht getroffen. –

+0

So dass das Problem, dass Ihre selectTopOne nicht ausgelöst. Was ist d-> ui-> Projekte Typ (Sie sagten Textfeld, aber ich verstehe nicht, was ist Textfeld genau)? – Apin

Antwort

0

Warum verwenden Sie datachange() Signal Standardauswahl festlegen? Habe ich Recht, dass Sie beim Start des Programms standardmäßig das oberste Element auswählen möchten? Sie können nur Selektionsmodell verwenden, zum Beispiel:

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

NACH DER EDIT:

OK, ich habe es. Die Entscheidung (zum Beispiel) ist die Vererbung aus der Klasse QSortFilterProxyModel. Dort können Sie einige SLOT verwenden, die verwendet werden setFilterRexExp() (oder etwas anderes wahrscheinlich), wenn Sie Text in QLineEdit ändern werden. Danach sende ich etwas SIGNAL von diesem SLOT, das du von deiner Hauptklassen- und Aufrufmethode fangen kannst, die ich oben geschrieben habe, welche das erste Element auswähle. Oder, wenn Sie die Daten des Modellindex nicht verwenden:

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

Becoz Ich möchte das oberste Element zu dem Zeitpunkt auswählen, an dem das Projekt entsprechend der Eingabe des Benutzers gefiltert wird. –

1

Ich hoffe, diese Antwort wird Ihnen helfen.

ui.tableView->selectRow(0); 
ui.tableView->setFocus();