QTableWidget内存违规

时间:2016-05-09 15:54:27

标签: c++ qt qtableview qtablewidgetitem

我想在QTableWidget中重置颜色,但在i = j = 1时出现内存冲突错误。请注意col = 3row = 8

int col= ui->ServiceTableWidg->columnCount();
int row=ui->ServiceTableWidg->rowCount();

for(int j=0 ; j<row ; j++)
{
    for (int i=0 ; i<col ; i++)
    {
        if (ui->ServiceTableWidg->item(i,j) != NULL)
        {
            ui->ServiceTableWidg->item(i,j)->setBackground(Qt::white);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您的QTableWidget中可能没有任何物品。首先,您必须通过调用setItem()方法创建它们,例如:

for(int i = 0; i < ui->tableWidget->rowCount(); i++)
    for(int j = 0; j < ui->tableWidget->columnCount(); j++)
        ui->tableWidget->setItem(i, j, new QTableWidgetItem(tr("some")));

你检查NULL是错误的。使用dynamic_cast,例如:

if(QTableWidgetItem *item = dynamic_cast<QTableWidgetItem *>(ui->tableWidget->item(i, j)))
    item->setBackground(Qt::black);