QTableWidget опускает некоторые элементы, элементы создаются, но игнорируются - PullRequest
2 голосов
/ 06 октября 2019

У меня есть два разных проекта, в которых я использую объект 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 (мой реальный пример)

На некоторых компьютерах он работает нормально, а код прост, поэтому я понятия не имею, что я делаю неправильно

1 Ответ

0 голосов
/ 06 октября 2019

Кажется, что указатель элемента не является нулевым! Можете ли вы проверить, входит ли оно в условие if?

Вероятно, вам следует удалить и обнулить их в этих случаях.

...