gpt4 book ai didi

c++ - 在 Qt 中使用字符串创建 QVariantMap

转载 作者:行者123 更新时间:2023-11-30 04:08:44 49 4
gpt4 key购买 nike

很抱歉问了这么琐碎的问题,但我似乎无法把它弄对,所以我想我完全误解了我认为我知道的关于内存管理的一切。

我有一个函数可以解析一些数据的网络回复,它看起来像这样:

// Call from another function
QVariantMap *mappedResult = handleReply(reply);
...
// Function
QVariantMap *handleReply(QNetworkReply *reply) {
QVariantMap *result = new QVariantMap;
QVariant testvalue = new QVariant("testvalue");
result->insert("testkey", testvalue);
if (reply->error() > 0) {
qDebug() << "Error number = " + reply->errorString();
QVariant variant = QVariant.fromValue(reply->errorString());
result->insert("error", variant);
} else {
QJsonDocument jsonResponse = QJsonDocument::fromJson(jsonString.toUtf8());
QJsonObject jsonResponseObject = jsonResponse.object();
*result = jsonResponseObject.toVariantMap();
}
return result;
}

如果没有错误,结果将由内置的 toVariantMap 函数正确解析。但是,当出现错误时,我想在从函数发回的结果中创建一个条目。正如您在函数中看到的,我正在尝试以两种不同的方式从字符串创建 QVariants。

第一种方法会报这样的错误:

C:\Qt\5.2.0\mingw48_32\include\QtCore\qvariant.h:466: error: 'QVariant::QVariant(void*)' is private inline QVariant(void *) Q_DECL_EQ_DELETE;
^

第二种方法是这样的:

[PATH] error: expected primary-expression before '.' token QVariant variant = QVariant.fromValue(reply->errorString());

我也试过像这样设置值:

result->insert("testkey", "testvalue");
result->insert("error", reply->errorString());

最后一种方法不会给出编译错误,但无法在调试器中检查 return 语句中的结果变量,并且一旦执行 return 语句,应用程序就会崩溃并出现内存问题,表明我没有使用“new”

"Error accessing memory address 0x...".

如果至少有一点知识的人可以帮助我理清如何执行这个简单的任务,我将非常感激。 如何从我的函数中返回一个 QVariantMap 并将自定义字符串作为键/值对?

干杯。

最佳答案

我会按以下方式编写您的函数(带有修复):

QVariantMap *handleReply(QNetworkReply *reply) {
QVariantMap *result = new QVariantMap;
QVariant testvalue("testvalue"); // <- fixed here
result->insert("testkey", testvalue);
if (reply->error() > 0) {
qDebug() << "Error number = " + reply->errorString();
QVariant variant(reply->errorString()); // <- fixed here
result->insert("error", variant);
} else {
QJsonDocument jsonResponse = QJsonDocument::fromJson(jsonString.toUtf8());
QJsonObject jsonResponseObject = jsonResponse.object();
*result = jsonResponseObject.toVariantMap();
}
return result;
}

但是仍然不清楚,为什么您需要使用指向变体映射的指针而不是按值传递它?

关于c++ - 在 Qt 中使用字符串创建 QVariantMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21676865/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com