问题:
判断QTableWidget的item是否为空时,调用ui->tableWidget->item(i,j)->text()程序崩溃。
原因:
- (1)如果是没有被编辑过的单元格,将不能用ui->tableWidget->item(i,j)->text()访问,因为该指针ui->tableWidget->item(i,j)为NULL。
- (2)如果被编辑过,此时指针不为空了,但内容仍然是空(例如text()==tr("")),则可以用ui->tableWidget->item(i,j)->text().isEmpty()判断。
代码:
// 判断指向该item的指针是否为空 || 判断该item的text是否为空
if(ui->tableWidget_bsdl->item(i,j)==nullptr || ui->tableWidget_bsdl->item(i,j)->text().isEmpty())
{
}
解释:
- (1)因为C++逻辑或和逻辑与采用短路求值策略:对于逻辑或运算,当且仅当左侧运算对象为假时,才对右侧运算对象求值。
- (2)当ui->tableWidget->item(i,j)==nullptr为真时,是空指针,此时左侧运算对象为真,不会对右侧运算对象求值,即,不会用空指针去访问->text(),不会判断ui->tableWidget->item(i,j)->text()是否为空,是安全的。
- (3)当ui->tableWidget->item(i,j)==nullptr为假时,不是空指针,此时才对||的右侧运算对象求值,又因为它不是空指针,所以用它访问->text()是安全的。
我是看了这篇文章【Qt开发】QTableWidget 判断cell内容为空
才知道为啥判断QTableWidget的item是否为空时,调用ui->tableWidget->item(i,j)->text()程序崩溃。但把原文章的if条件改了一下。