提问人:user3204810 提问时间:3/12/2014 最后编辑:Shoeuser3204810 更新时间:6/6/2014 访问量:327
QList的麻烦
Trouble with QList
问:
如果我在函数中设置了一个 QList,它就可以正常工作
void MainWindow::ReadXML() {
...
QList<QString> list;
list << "alfa" << "beta" << "gamma" << "delta" << "epsilon";
...
}
但是,如果尝试在块之外编写相同的代码(QList必须对整个文件可见),Qt Creator会在最后一行用红色下划线告诉我这个错误:“expeted to declaration”
有什么建议吗?
答:
4赞
László Papp
3/12/2014
#1
您将有几种方法可以解决此问题,但这里是其中之一:
static QStringList myStringList = QStringList << "foo" << "bar" << "baz";
void MainWindow::ReadXML()
{
...
useMyStringList(myStringList);
...
}
但是使用这样的静态变量是不好的做法,所以我可能会更多地使用 C++,至少,我会创建一个函数如下:
static QStringList myStringList()
{
static QStringList stringList = QStringList() << "foo" << "bar" << "baz";
return stringList;
}
void MainWindow::ReadXML()
{
...
useMyStringList(myStringList());
...
}
1) 请注意,您可以使用 QStringList 而不是 QList。它将为您提供方便的方法,总的来说,感觉更自然。
2)使用C++11及更高版本,您可以使用初始值设定项列表,因此无需编写:
QStringList myStringList = QStringList << "foo" << "bar" << "baz";
您可以这样做:
QStringList myStringList{"foo", "bar", "baz"};
评论
0赞
user3204810
3/12/2014
谢谢,非常有用的信息!只有一个问题:什么是useMyStringList()?
0赞
László Papp
3/12/2014
@user3204810:这是你做的任何功能。我只是将其用作占位符。当然,如果你在不调用另一个函数的情况下处理函数中的字符串列表,你就不需要它。
0赞
Kuba hasn't forgotten Monica
3/12/2014
为了抢占过于急切的注释:值得注意的是,任何有价值的编译器,如果不是直接内联函数,都会在 中应用 NRVO,因此按值返回的效率并不比按常量引用返回的效率低(如 中)。正如 Laszlo 所建议的那样,按值返回是完全正确和惯用的。myStringList
static const QStringList & myStringList()
评论