У меня есть два разных проекта, в которых я использую объект QTableWidget
, и у меня одна и та же проблема в обоих. Я пытаюсь заполнить QTableWidget
объект new QTableWidgetItem
, но некоторые элементы пропущены, они не представлены в таблице. Проблема возникает с компиляторами 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) и(0, 2) и (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 (мой реальный пример)
На некоторых компьютерах он работает нормально, а код прост, поэтому я понятия не имею, что я делаю неправильно