Remplir un QTableWidget en parcourant une base de données
Bonjour,
je voudrais remplir un QtableWidget (et non une QTableView) en utilisant QConcurrent.
J'arrive à mes fins mais j'ai dû ajouter dans mon main.cpp
Code:
1 2 3 4
| qRegisterMetaType<QVector<int> >("QVector<int>");
qRegisterMetaType<QList<QPersistentModelIndex> >("QList<QPersistentModelIndex>");
qRegisterMetaType<QItemSelection>("QItemSelection");
qRegisterMetaType<QAbstractItemModel::LayoutChangeHint>("QAbstractItemModel::LayoutChangeHint"); |
sans trop comprendre quel est exactement le problème.
Cependant, j'ai lu plusieurs fois que piloter des éléments graphiques de la fenêtre (QTableWidget en est un) à partir d'un code appelé par le thread était "malsain" ?
Donc, existe-t-il une approche "recommandable" pour utiliser une requête SQL dans un thread secondaire ? Est-ce compatible avec le remplissage d'un QTableWidget de la manière suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| ui->table->setUpdatesEnabled( false ) ;
ui->table->setRowCount(query.size());
int index=0;
while (query.next())
{
ui->table->setItem(index,0,new QTableWidgetItem(query.value(0).toString()));
ui->table->setItem(index,1,new QTableWidgetItem(query.value(1).toString()));
ui->table->setItem(index,2,new QTableWidgetItem(query.value(2).toString() + " " + query.value(3).toString()));
ui->table->setItem(index,3,new QTableWidgetItem(query.value(4).toString()));
index++;
if (bfutureStop == true) return;
}
//Lancer le tri par défaut
sortCol = 2;
sortOrder = Qt::AscendingOrder;
ui->table->sortByColumn(3, sortOrder);
ui->table->sortByColumn(2, sortOrder);
//Select First Row
ui->table->selectRow(0);
ui->table->setUpdatesEnabled( true ) ; |
Merci.