首页 > 解决方案 > QStrings isNull out of QSettings 是错误的

问题描述

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

#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;
}

输出是

String is null: true
Time is null: true
String is null: false
Time is null: true

标签: c++qt

解决方案


文档中的注释:“由于历史原因,Qt 区分了空字符串和空字符串。” 我认为最好不要依赖这种区别。与其设置空字符串,不如根本不设置该选项(或明确取消设置)。

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

除此之外,我会使用QVariant::isNull()而不是转换为字符串。


推荐阅读