2017-09-17 6 views
0

Je récupère un ensemble de résultats de la base de données et je veux remplir le QComboBox avec les colonnes résultantes de la base de données (chaque ligne du QComboBox devrait avoir les mêmes colonnes que le résultat de la base de données) et après Je voudrais être en mesure de récupérer d'une ligne de la QComboBox une colonne spécifique et l'utiliser plus loin dans l'application. Je pense qu'il serait possible d'ajouter QTableView à QComboBox. Je veux faire ceci parce que je veux ajouter plus de signification aux résultats d'une manière que certaines colonnes de résultat sont simplement des nombres simples et d'autres sont les informations de description.Ajouter QTableView à QComboBox

J'ai découvert qu'il serait possible de concaténer le résultat et de remplir le QComboBox mais cela me laissera avec une seule valeur pour chaque ligne à travailler et je dois faire exploser la chaîne pour obtenir la partie exacte qu'elle est nécessaire de travailler avec.

+0

Il sera préférable de créer votre propre widget pour faire ce genre de travail, créer une action d'ajout de QLineEdit avec une icône flèche vers le bas (comme dans la combobox) et sur l'action déclenchée pop-up un QFrame contenant votre QTableView ou tout autre widget que vous souhaitez faire apparaître, – Simon

Répondre

1

Le pop-up qui vient par défaut est un QListView, cela peut être modifié avec un objet qui hérite de QAbstractItemView, et dans ce cas un QTableView sera utilisé pour elle d'utiliser la méthode setView(), le résultat en cliquant doit retourner uniquement un élément de la ligne sélectionnée, puis pour définir la colonne à afficher après avoir été sélectionné utilisera la méthode setModelColumn() indiquant la position de la colonne, mais avant que le modèle est défini sur le QComboBox en utilisant la méthode setModel().

# 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); 

Note: Le modèle est mis à QComboBox, pas QTableView. vous pourriez aussi avoir des problèmes avec la largeur de QTableView, nous devons donc redimensionner, dans mon cas, utilisez les éléments suivants:

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

L'exemple complet peut être trouvé dans ce qui suit link