我试图在运行时将项附加到QList,但我正在运行错误消息.基本上我要做的是创建一个QLists的QList,并为每个内部列表添加一些customClass对象.这是我的代码:
widget.h:
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
public slots:
static QList<QList<customClass> > testlist(){
QList<QList<customClass> > mylist;
for(int w=0 ; w<5 ; w++){
mylist.append(QList<customClass>());
}
for(int z=0 ; z<mylist.size() ; z++){
for(int x=0 ; x<10 ; x++){
customClass co = customClass();
mylist.at(z).append(co);
}
}
return mylist;
}
};
Run Code Online (Sandbox Code Playgroud)
customclass.h:
class customClass
{
public:
customClass(){
this->varInt = 1;
this->varQString = "hello world";
}
int varInt;
QString varQString;
};
Run Code Online (Sandbox Code Playgroud)
main.cpp中:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
QList<QList<customClass> > list;
list = w.testlist();
w.show();
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译应用程序时,它会发出以下错误:
error: passing `const QList<customClass>' as `this' argument of `void List<T>::append(const T&) [with T = customClass]' discards qualifiers
Run Code Online (Sandbox Code Playgroud)
我也尝试使用foreach插入对象:
foreach(QList<customClass> list, mylist){
for(int x=0 ; x<10 ; x++){
list.append(customClass());
}
}
Run Code Online (Sandbox Code Playgroud)
错误消失了,但是没有附加customClass对象,我可以通过在main中使用调试循环来验证内部QLists大小为零.我究竟做错了什么?
Qt参考说:
const T&at(int i)const
但不是:
T&at(int i)
所以没有非const版本的at
.你必须operator[]
改用.
所以改成它:
mylist[z].append(co);
Run Code Online (Sandbox Code Playgroud)
它会起作用.我甚至测试过它.
我认为foreach版本不起作用,因为foreach(QList<customClass> list, mylist)
QList<customClass> list
它不是参考.但是foreach(QList<customClass>& list, mylist)
没有编译.所以你必须使用正常for(...)
版本.