目的
我是想批量往一个布局器中写入控件,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控件数组。