Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt-QList不附加本地对象_C++_Qt_Qtcore_Qlist_Qmap - Fatal编程技术网

C++ Qt-QList不附加本地对象

C++ Qt-QList不附加本地对象,c++,qt,qtcore,qlist,qmap,C++,Qt,Qtcore,Qlist,Qmap,我很难理解为什么下面的代码没有将任何QString对象存储到我的QList中 QMap<QString, QList<QString> >map; map = QMap<QString, QList<QString> >(); map.insert("eins", QList<QString>()); QList<QString> listInMap = map["eins"]; listInMap.append("test

我很难理解为什么下面的代码没有将任何QString对象存储到我的QList中

QMap<QString, QList<QString> >map;
map = QMap<QString, QList<QString> >();
map.insert("eins", QList<QString>());
QList<QString> listInMap = map["eins"];
listInMap.append("test1");
listInMap.append("test2");
QList<QString> copyOfListInMap = map.value("eins");
qDebug() << copyOfListInMap.count();
QMapmap;
map=QMap();
insert(“eins”,QList());
QList listInMap=map[“eins”];
listInMap.append(“test1”);
listInMap.append(“test2”);
QList copyOfListInMap=map.value(“EIN”);

原因很简单:写时复制,又名

另一方面,您可能希望看一看。虽然它继承了QList,但它还有一些额外的方便方法

现在,你可能会问:
那么我该如何填写我的地图呢?

多地图 我个人建议使用QMap,或者至少使用QMap

main.cpp 构建并运行 输出 单一地图 如果您坚持当前的方法,我建议您要么将该值附加到一个新的QStringList中,然后用它覆盖该值,要么保留对完全相同列表的引用

已经说过,在您的情况下,甚至考虑外部存储插入也有点过头了。依我拙见,你应该马上做那件事

main.cpp 构建并运行 输出 根据客户要求,您的样品应更改如下:

QMap<QString, QList<QString> >map;
QList<QString> & listInMap = map["eins"]; // use reference here
listInMap.append("test1");
listInMap.append("test2");
QList<QString> copyOfListInMap = map.value("eins");
qDebug() << copyOfListInMap.count();
QMapmap;
QList&listInMap=map[“eins”];//在这里使用参考
listInMap.append(“test1”);
listInMap.append(“test2”);
QList copyOfListInMap=map.value(“EIN”);

qDebug()你听说过QStringList吗?是的,我听说过,我在这个例子中使用了QString对象来演示我的问题。在“真实世界”应用程序中,我使用了一个没有继承QObject的额外类。这是我的错,也许我应该在开场白中澄清一下……QString和QList都没有继承QObject。好的,lpapp,那么我的“示例”问题代表了我的实际问题,没有任何修改。@IrfanDANISH:请不要删除故意添加的标记,谢谢。这解决了我的实际问题,谢谢Andrey!但我不明白,如果我使用指针而不是引用,为什么它不起作用。此外,我还没有得到编译器关于这方面的警告?@blackworker:因为CoW,正如lpapp在他的回答中所描述的,谢谢你的努力。我将研究隐式共享——我认为它包含了我需要的关于Qt的更大图景的关键事实。目前,我有一个小小的想法,就是列出的qt类中只能存在一个“真实实例”:所以我不能有多个指向一个唯一实例的指针来访问/修改它。我唯一不明白的是,为什么它使用引用。但我想在接下来的一个小时内,事情就清楚了:)非常感谢你的帮助@黑工:因为在这种情况下,你不会创建一个浅拷贝。你只有一份推荐信。事实上,不管它是CoW还是value copy,您只需要为此类情况提供参考。但是,再一次,我认为你首先不应该在这种简单的情况下使用外部变量。请参阅上面我的3-4行代码,它比您原来的“凌乱”代码要容易得多。:)@lpapp这都是真的,但在这种情况下,我认为问题不在于此。这个解决方案就是安德烈所描述的。
listInMap.append("test1");
listInMap.append("test2");
#include <QMap>
#include <QDebug>
#include <QString>

int main()
{
    QMultiMap<QString, QString> map;
    map.insert("eins", "test1");
    map.insert("eins", "test2");
    qDebug() << map.count();
    return 0;
}
TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp
qmake && make && ./main
2
#include <QMap>
#include <QDebug>
#include <QString>

int main()
{
    QMap<QString, QStringList> map;
    map.insert("eins", QStringList{"test1", "test2"});
    qDebug() << map.value("eins").count();
    return 0;
}
TEMPLATE = app
TARGET = main
QT = core
CONFIG += c++11
SOURCES += main.cpp
qmake && make && ./main
2
QMap<QString, QList<QString> >map;
QList<QString> & listInMap = map["eins"]; // use reference here
listInMap.append("test1");
listInMap.append("test2");
QList<QString> copyOfListInMap = map.value("eins");
qDebug() << copyOfListInMap.count();