Qt 判斷QTableWidget的item是否爲空,調用ui->tableWidget->item(i,j)->text()程序崩潰

問題:

判斷QTableWidget的item是否爲空時,調用ui->tableWidget->item(i,j)->text()程序崩潰。

原因:

(1)如果是沒有被編輯過的單元格,將不能用ui->tableWidget->item(i,j)->text()訪問,因爲該指針ui->tableWidget->item(i,j)爲空。
(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條件改了一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章