【问题标题】:Trouble with QListQList 的问题
【发布时间】:2014-03-12 00:10:50
【问题描述】:

如果我在函数中设置 QList,它会正常工作

void MainWindow::ReadXML() {
    ...
    QList<QString> list;
    list << "alfa" << "beta" << "gamma" << "delta" << "epsilon";
    ...
}

但是如果尝试在块之外编写相同的代码(QList 必须对整个文件可见),Qt Creator 会在最后一行用红色下划线告诉我这个错误:“expeted to declaration”

有什么建议吗?

【问题讨论】:

  • 您不能将任何不是声明的东西放在全局范围内,甚至将声明放在那里通常被认为是不好的做法。
  • 最好的方法是什么?
  • 最有可能利用类或函数参数并适当地返回值。

标签: c++ qt qstring qtcore qlist


【解决方案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"};

【讨论】:

  • 谢谢,非常有用的信息!只有一个问题:useMyStringList() 是什么?
  • @user3204810:不管你做什么功能。我只是用它作为占位符。当然,你不需要它,如果你在函数内部处理字符串列表而不调用另一个。
  • 抢占过分热切的 cmets:值得注意的是,任何值得其盐的编译器,如果不是直接内联函数,将在 myStringList 中应用 NRVO,因此按值返回的效率不低于通过 const 引用返回(如static const QStringList &amp; myStringList())。正如 Laszlo 所建议的,按值返回是完全正确和惯用的。
猜你喜欢
  • 1970-01-01
  • 2011-04-08
  • 2018-03-31
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多