我有个问题。
由于某种原因,尽管我在QString中有一个值,但对QVector执行append()是不起作用的,最终我仍然只有一个空向量。
QList<QVariant> listServers = mapRepos.values ( "servers" ); // Finally, the last data structure, for holding server lists.
// Populate the repository information with the server lists.
for ( int i = 0; i < listServers.size(); ++i ) {
for ( int j = 0; j < listServers.at ( i ).toList().size(); ++j ) {
std::cout << "On file: " << listServers.at ( i ).toList().at ( j ).toString().toStdString() << std::endl;
std::cout << "Type #: " << listServers.at ( i ).toList().at ( j ).type() << std::endl;
buffer3 = listServers.at ( i ).toList().at ( j ).toString();
std::cout << "In buffer: (" << buffer3.toStdString() << ")" << std::endl;
arrayRepos.value ( j ).urls.append ( buffer3 );
std::cout << "In memory: " << arrayRepos.value ( i ).urls.value ( i ).toStdString() << std::endl;
}
}
}这是源文件中的相关代码片段。第一个cout返回一个URL,第二个URL返回10 (根据文档,这意味着QVariant包含一个字符串,这是正确的。第三个cout正确地输出字符串。然后,最后一个不输出字符串。注意这里有一个附加的行。我所有的编程常识都告诉我,现在应该填充向量,但是看一眼它的大小就会发现它的大小是0,这意味着没有放入QString。
urls是结构的一部分:
结构存储库{
QString name; // Name of the repository. QVector`<QString>` urls; // Address of server or list of mirrors.};
QString名称是早期代码的一部分,工作正常,与此问题无关。
我想不出append()或push_back()为什么不能工作。
发布于 2011-05-05 12:24:58
arrayRepos的类型是什么,我猜它是某种Qt容器(QVector、QList等)。在这种情况下,当您需要引用时,arrayRepos.value (j)将返回repo结构的副本,因此您需要使用operator[]或at(j)成员函数。
发布于 2011-05-05 13:38:49
您能否将这段arrayRepos.value ( j ).urls.append ( buffer3 );代码分解为单独的语句,然后尝试。
像这样:
QVector<QString> tmpurls = arrayRepos.value ( j ).urls;
tmpurls.append ( buffer3 );https://stackoverflow.com/questions/5892610
复制相似问题