【发布时间】:2019-10-06 10:49:42
【问题描述】:
我有两个不同的项目,我使用 QTableWidget 对象,我在这两个项目中都有同样的问题。
我尝试用new QTableWidgetItem 填充QTableWidget 对象,但有些项目丢失了,它们没有在表中表示。
MinGW 和 MSVC 编译器会出现问题。
我已经尝试过 5.12.1 和 5.12.5 Qt 版本。
请帮我弄清楚它有什么问题。
我使用非常简单的代码,如下所示
在一个项目中,如果我连续两次调用createItems(),则表格已填满
但是另一个项目使用更大的表,所以如果我多次调用它,这段代码就可以工作,但无论如何都不是完全的
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));
}
}
}
它是 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
请注意(1, 2) and (0, 2) and (2, 2),为什么会这样?
然后我像下面这样循环填充项目。并非所有项目都被创建时代码崩溃,很明显项目指针为空但我确定它已被创建
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);
}
在第二个项目中,我在通过“new”命令创建项目时填充项目,然后我调用类似pTable->setItem(r, c, pItem)
在使用setItem 的第二个项目中,表格看起来像this (my real example)
它在某些计算机上正常工作,代码很简单,所以我不知道我在做什么错
【问题讨论】:
标签: c++ qt missing-data qtablewidget qtablewidgetitem