QTableWidget 的 Item为空:程序异常结束 (**)

item为空,导致在编译过程、或调用过程中:程序崩溃

坑点:

包含了调用 ui->tableWidget->item(i,j)->text() 语句时,程序崩溃。


原因:

1. 每个单元格需要 setItem方法设置一个QTableWidgetItem,然后你才能调用ui.tableWidget->item(1,1)->text()
否则item(1, 1)返回NULL,调用text()会出错

来源: https://tieba.baidu.com/p/2831070684

2. 如果是没有被编辑过的单元格,将不能用 ui->tableWidget->item(i,j)->text() 访问,因为该指针ui->tableWidget->item(i,j)为空。


解决

1. 在初始化时,全部编辑一遍 item(i,j)

    初始化:最好放在 构造函数中执行?
    for(int row = 0; row < 4; row++)
    {
        for(int col = 0; col < 3; col++)
        {
            if(ui->tableWidget->item(row,col)==nullptr || ui->tableWidget->item(row,col)->text().isEmpty())
            {
                ui->tableWidget->setItem(row,col,new QTableWidgetItem); // 关键语句 ****
                //...
            }
        }
    }

2. 使用下面的语句,进行访问

还不知道是否有其他副作用

ui->tableWidget->model()->index(i, col).data().toString();

参考:

【Qt】将数据导出到csv文件

    //写表头
    for(i = 0;i < col; i++)
    {
        out<<model->headerData(i,Qt::Horizontal,Qt::DisplayRole).toString()<<",";
        if(i == (col - 1))
        {
            out<<"\n";
        }
    }
    //写数据
    for(i = 0;i < row; i++)
    {
        for(j = 0;j < col; j++)
        {
            index = model->index(i,j);
            out<<model->data(index).toString()<<",";
            if(j == (col - 1))
            {
                out<<"\n";
            }
        }
    }

————————————————
版权声明:本文为CSDN博主「菜老越」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/spiremoon/article/details/106240222

3.

// 先判断指向该item的指针是否为空 || 判断该item的text是否为空
if(ui->tableWidget->item(i,j)==nullptr || ui->tableWidget->item(i,j)->text().isEmpty())  
{    
    //...
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值