J'ai deux projets différents où j'utilise QTableWidget
et j'ai le même problème dans les deux. J'essaie de remplir le QTableWidget
avec new QTableWidgetItem
mais certains éléments sont manquants, ils ne sont pas représentés dans le tableau. Le problème apparaît avec les compilateurs MinGW et MSVC. Je l'ai essayé avec les versions 5.12.1 et 5.12.5 de Qt. Veuillez m'aider à comprendre ce qui ne va pas.
J'utilise un code très simple comme ci-dessous Dans un projet, si j'appelle createItems()
deux fois de suite pour que le tableau soit rempli mais l'autre projet utilise un tableau plus grand donc ce code fonctionne si je l'appelle beaucoup plus de fois, mais pas complètement de toute façon
void MainWindow::createItems()
{
for (int r = 0; r < ui->tableWidget->rowCount(); ++r)
{
for (int c = 0; c < ui->tableWidget->columnCount(); ++c)
{
QTableWidgetItem *pi = ui->tableWidget->item(r, c);
if (pi != nullptr) continue;
pi = new QTableWidgetItem();
ui->tableWidget->setItem(r, c, pi);
qDebug() << r << c << pi << ui->tableWidget->item(r, c)
<< (pi == ui->tableWidget->item(r, c));
}
}
}
c'est une partie de la sortie de qDebug
0 0 0x2c4af2f0 0x2c4af2f0 true
0 1 0x2c4af970 0x2c4af970 true
0 2 0x2c4af9b0 0x2c4af9b0 true
0 3 0x2c4afa70 0x2c4afa70 true
0 4 0x2c4aeb30 0x2c4aeb30 true
0 5 0x2c4aecb0 0x2c4aecb0 true
1 0 0x2c4aed30 0x2c4aed30 true
1 1 0x2c4aedf0 0x2c4aedf0 true
1 2 0x2c4aee30 0x2c4af9b0 false
2 0 0x2c4afdf0 0x2c4afdf0 true
2 1 0x2c4aeef0 0x2c4aeef0 true
2 2 0x2c4aef30 0x2c4af9b0 false
veuillez prêter attention à (1, 2) et (0, 2) et (2, 2), pourquoi cela se produit-il ?
et ensuite je remplis les éléments dans un cycle comme ci-dessous. Le code se plante lorsque tous les éléments ne sont pas créés, il est évident que le pointeur de l'élément est nul mais je suis sûr qu'il a été créé.
for (int r = 0; r < rows_amount; ++r)
{
ui->tableWidget->item(r, 0)->setData(Qt::DisplayRole, r);
ui->tableWidget->item(r, 1)->setData(Qt::DisplayRole, r+1);
}
dans le second projet, je remplis les éléments lorsqu'ils sont créés par la commande 'new', puis j'appelle quelque chose comme pTable->setItem(r, c, pItem)
Dans le deuxième projet où setItem
est utilisé, le tableau ressemble à ceci (mon exemple réel)
Il fonctionne normalement sur certains ordinateurs, et le code est simple, donc je n'ai aucune idée de ce que je fais de travers.