关于qt中tablewidget-」setCellWidget使用问题记录

在Qt项目中,使用TableWidget显示数据并添加自定义按钮时遇到指针异常问题。当尝试在第三列设置自定义按钮控件时,切换页面会导致访问冲突错误。通过断点调试,发现原因是TableWidget的clear()方法释放了对象,改用局部或匿名对象加载自定义按钮解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因项目需求为表格展示,需要使用tablewidget控件
原定计划为共三列,前两列为字段,最后一列为按钮操作,故写了一组自定义按钮,但是在添加按钮控件时,出现指针异常,现贴出代码,记录解决方案,原因之后有空研究填坑。

在这里插入图片描述
我用了stackwidget设置为四页,每页都是有一个tablewidget作为数据展示,先是设置表头,然后使用setItem将字符字段从内存中写入tablewidget中,此时切页都为正常,随后使用setCellWidget添加自定义按钮控件时,出现了问题,初步怀疑为指针使用问题
最开始的写法为在头文件中QList<tableButton*> m_ButtonList;在构造中new出对象并且赋值,使用ui.PtableWidget_1->setCellWidget(i,2,m_ButtonList.at(i));在tablewidget中的第三列添加自定义控件方法,第一次进入PtableWidget_1页面时是正确的(因为项目需求,所以上面贴图代码写在了切换第一页的槽函数中),此时点击按钮切换为第一页时,出现了指针访问错误的提示,如图:
在这里插入图片描述
提示:
0x00007FFE945628C1 (Qt5Widgetsd.dll)处(位于 cruiseProject.exe 中)引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。
经过我断点调试,发现此类问题的原因可能是qt中控件tablewidget使用clear时,会释放tablewidget控件中的对象,因为将自定义按钮改为局部对象(匿名对象也是ok的),用来加载时,这个问题就不会出现了

tableButton* temp = new tableButton(i);
ui.PtableWidget_1->setCellWidget(i, 2, temp);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值