我有特定行和列的表格小部件,
我的功能如下
从第一列和第二列获取值
比较它们并在第三列中返回结果
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;
}
}
答案 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) ;缺少分号)。