首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QStrings isNull of QSettings是错误的

QStrings isNull of QSettings是错误的
EN

Stack Overflow用户
提问于 2020-08-11 13:00:48
回答 2查看 201关注 0票数 1

我注意到QSettings无法存储QString的isNull属性。在其他情况下(QTime),QSettings按预期工作。我出什么事了吗?

代码语言:javascript
复制
#include <QTime>
#include <QString>
#include <QSettings>
#include <iostream>
int main(int argc, char *argv[])
{
    QString str;
    QTime time;
    std::cout << "String is null: " << std::boolalpha << str.isNull() << std::endl;
    std::cout << "Time is null: " << std::boolalpha << time.isNull() << std::endl;
    QSettings settings("Settings");
    settings.setValue("string", str);
    settings.setValue("time", time);
    std::cout << "String is null: " << std::boolalpha << settings.value("string").toString().isNull() << std::endl;
    std::cout << "Time is null: " << std::boolalpha << settings.value("time").toTime().isNull() << std::endl;
    return 0;
}

输出是

代码语言:javascript
复制
String is null: true
Time is null: true
String is null: false
Time is null: true
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-11 13:11:12

文档中的注释:“出于历史原因,Qt对空字符串和空字符串进行了区分。我认为最好不要依赖这种区分。与其设置空字符串,不如完全不设置选项(或者明确地取消设置)。

QSettings无法存储空字符串的实际原因很可能是存储格式不支持这一点。存储设置的一种常见格式是INI格式(请参阅这里),它无法区分空和空。

除此之外,我将使用QVariant::isNull(),而不是转换为string。

票数 3
EN

Stack Overflow用户

发布于 2020-08-11 13:10:42

尝试键入settings.value("string").isNull()而不是settings.value("string").toString().isNull()。因为您尝试转换为字符串类型为空值。

我用这个(如何将QString初始化为null?)帖子来回答你

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63358696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档