Qt Debug Assertion Failed 报错

目的

我是想批量往一个布局器中写入控件,QLabel,QWidget都有,大概二十个,一行一行的写太费劲了。

Qt Debug Assertion Failed!报错原因

估计是野指针或者是内存泄漏,因为我用数组经常就有内存访问越界的问题。如图:
在这里插入图片描述

我的出错代码
    QVBoxLayout* layout = new QVBoxLayout;//new了一个布局器
    QLabel* labels = new QLabel[3];//这里new了一个三个QLabel的数组;
    QStringList qstrList;
    qstrList<<u8"事件列表" << u8"考核标准" <<u8"科目列表";//三个字符串
    for(int i = 0; i<3;i++){
        labels[i].setText(qstrList.at(i));//QLabel设置文字
        //----设置Qss----
        //----设置字体----
    }
    for(int i = 0;i<3;i++){
        layout->addWidget(&labels[i]);//布局器中加入QLabel
    }

是可以显示出来的点上那个关闭窗口的X就会出现报错,如图:在这里插入图片描述
我这labels变量不是成员变量不牵扯到关闭窗口前的析构的问题,换成release关闭窗口也会有程序异常结束的字样。

我的解决方式

我之前用C++数组用习惯了,Qt批量设置组件还是换成QVector和QList之类的容器比较好。解决后的代码:

QVBoxLayout* layout = new QVBoxLayout;//new了一个布局器
QVector<QLabel*> labels(3);//1.现在知道要用三个所以我限定了三个,防止内存拷贝。也可以试试QList容器 
//2.容器中的类型不能是组件,只能是组件的指针。


    QStringList qstrList;
    qstrList<<u8"事件列表" << u8"考核标准" <<u8"科目列表";//三个字符串
    for(int i = 0; i<3;i++){
        QLabel* label = new QLabel(qstrList.at(i));
        //----设置Qss----
        //----设置字体----
        labels.append(label);
    }
    for(int i = 0;i<labels.size();i++){
        layout->addWidget(labels.at(i));
    }

再关闭窗口就没有报错了。之前的报错我认为是布局器的原因,之前看到QtCreate给过我警告,不要new控件数组。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄猿欲度愁攀援

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值