2017-09-17 2 views
0

Ich erhalte eine Reihe von Ergebnissen aus der Datenbank und möchte die QComboBox mit den resultierenden Spalten aus der Datenbank füllen (jede Zeile der QComboBox sollte die gleichen Spalten wie das Datenbankergebnis haben) und danach Ich möchte in der Lage sein, aus einer Zeile der QComboBox eine bestimmte Spalte abzurufen und sie in der App weiter zu verwenden. Ich denke, wenn es möglich wäre, QTableView zu QComboBox hinzuzufügen. Ich möchte dies tun, weil ich den Ergebnissen mehr Bedeutung geben möchte, so dass einige Ergebnisspalten nur einfache Zahlen sind und andere die Beschreibungsinformationen sind.QTableView zu QComboBox hinzufügen

Ich fand heraus, dass es möglich wäre, das Ergebnis zu verketten und die QComboBox aufzufüllen, aber das wird mich mit nur einem Wert für jede Zeile arbeiten lassen und ich muss die Zeichenfolge explodieren, um den genauen Teil zu erhalten musste mit arbeiten.

+0

Es wird besser sein erstellen Sie Ihre eigenes Widget, um diese Art von Job zu machen, QLineEdit Aktion mit einem Pfeil-nach-unten-Symbol (wie in der Combobox) erstellen und auf Aktion ausgelöst ein QFrame mit Ihrem QTableView oder einem anderen Widget Popup, – Simon

Antwort

1

Das Popup, die standardmäßig kommt, ist ein QListView, das mit einem Objekt geändert werden kann, die von QAbstractItemView erbt, und in diesem Fall ein QTableView verwendet werden, damit es die setView() Methode zu verwenden, um das Ergebnis beim Klicken nur zurückkehren Ein Element der ausgewählten Zeile und dann die Spalte, die nach der Auswahl angezeigt werden soll, verwendet die Methode setModelColumn(), die die Position der Spalte angibt. Vorher wird das Modell jedoch mit der Methode setModel() auf die QComboBox gesetzt.

# my model 
model = new QSqlTableModel; 
model->setTable("person"); 
model->select(); 
# setModel 
comboBox->setModel(model); 
# select column 
comboBox->setModelColumn(1); 

QTableView *view = new QTableView(this); 
comboBox->setView(view); 

Hinweis: Das Modell QComboBox gesetzt ist, nicht zu QTableView. Auch Sie könnten Probleme mit der Breite von QTableView haben, also müssen wir die Größe, in meinem Fall die Verwendung folgende:

view->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); 
view->setMinimumWidth(500); 

Das komplette Beispiel kann in die gefunden werden folgende link