大家好,我是软件工程师Michael!
今天分享一下我在QT开发中遇到的问题与解决方案。
问题
QString 类型直接和双引号" "括起来的常量进行对比, 可能出现因类型不同导致的无法相同。
比如以下用QString获取web中的一个校验码,if ("请求成功!"== g_strResponseMessage && g_bResponseSuccess),其中 "请求成功!" == g_strResponseMessage即使变量值是对的,也一直为false。
解决方案
在常量字符串前加QString::fromLocal8Bit()函数。
改正前:
if ("请求成功!"== g_strResponseMessage && g_bResponseSuccess)
改正后:
if ((QString::fromLocal8Bit("请求成功!") == g_strResponseMessage) && g_bResponseSuccess)
源代码如下:
cJSON *root = cJSON_Parse(tmpStr.toStdString().c_str());
if (!root)
{
const char *err = cJSON_GetErrorPtr();
printf("Error before: [%s]", err);
free((void *)err);
}
cJSON *item = NULL;
item = cJSON_GetObjectItem(root, "message");
if (item != NULL)
{
if (item->type == cJSON_String)
{
g_strResponseMessage = QString::fromStdString(item->valuestring);
}
}
item = cJSON_GetObjectItem(root, "success");
if (item != NULL)
{
g_bResponseSuccess = item->type;
}
//有问题的比较语句
if ("请求成功!"== g_strResponseMessage && g_bResponseSuccess)
{
item = cJSON_GetObjectItem(root, "data");
if (item->type == cJSON_Array)
{
cJSON * obj = item->child;
if (obj ->type == cJSON_String)
{
g_baData = obj->valuestring;
g_strData = QString(g_baData);
}
}
}
else
{
// QMessageBox::information(NULL, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("请求校验码失败"));
}