1

我有具有特定行和列的表格小部件,

我的功能如下

从第一列和第二列获取值

比较它们并在第三列返回结果

例如:第一列:1 2 3 第二列 2 2 3 结果列 否 是 是

我确保我的代码使用 qDebug 工作,但是当我编译并运行它时,主窗口停止并崩溃。

我使用 for 循环来抛出所有行 for(int row=0;rowtableWidget->rowCount();row++)

我认为这一行 rowtableWidget->rowCount() coz 当它读取空单元格时应用程序冻结并停止工作。

我怎样才能避免这种情况发生

void MainWindow::GenerateRes() {
    QString Result;
    for(int row = 0; row < ui->tableWidget->rowCount(); row++) {
        QString R1 = ui->tableWidget->item(row, 0)->text();

        QString R2 = ui->tableWidget->item(row, 1)->text();

        if(R1 == R2) {
           Result = "P" ;
        } else {
           Result = "F" ;
        }

        QTableWidgetItem *Item = new QTableWidgetItem(Result);
        ui->tableWidget->setItem(row, 2, Item); 
        qDebug() << Item;
    }
}
4

2 回答 2

2

要检查 QTableWidget 中的 cell(i,j) 是否为空,请使用isNull()isEmpty()。例子:

for(int i=0; i < ui->tableWidget->rowCount(); i++)
{
    for(int j=0; j < ui->tableWidget->columnCount(); j++)
    {
        bool flag = ui->tableWidget->item(i,j)->text().isNull();

        if (!flag) /* the cell is not empty */
        {
            // do stuff 
        }
        else /* the cell is empty */
        {
            // do stuff
        }
    }
}
于 2018-02-11T20:41:27.450 回答
0

也许您应该检查从 tableWidget::item() 返回的值,因为如果没有将项目分配给提供的坐标,则函数可以返回 0,在这种情况下,您正在尝试调用方法 (QTableWidgetItem::text() ) 在零指针上。尝试类似:

QString R1;
QTableWidgetItem *item1(ui->tableWidget->item(row,0));
if (item1) {
    R1 = item1->text();
}

// and so on...

无论如何,您的代码看起来很奇怪,第 5 行 (ui->tableWidget->rowCount()) 没有意义,您不应该编译它(至少您缺少分号)。

于 2014-03-31T06:56:23.150 回答