QT:如何检查qt表小部件中是否有空单元格

时间:2014-03-31 06:28:21

标签: qt qtablewidget qtablewidgetitem

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

我的功能如下

从第一列和第二列获取值

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

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

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

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

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

我怎样才能使这种情况无效

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;
    }
}

2 个答案:

答案 0 :(得分:1)

要检查QTableWidget中的单元格(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
        }
    }
}

答案 1 :(得分: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-&gt; rowCount())没有意义,你不应该编译它(至少你是&#39) ;缺少分号)。