c++ - QSettings中的QStrings isNull是错误的

标签 c++ qt

我注意到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

最佳答案

从文档中注意:“由于历史原因,Qt区分空字符串和空字符串。”我认为最好不要依靠这种区别。与其设置一个空字符串,不如根本不设置该选项(或显式取消设置),则更好。
QSettings无法存储空字符串的实际原因很可能是存储格式根本不支持此功能。存储设置的一种常见格式是INI格式(请参见here),该格式无法区分空和空。
除此之外,我将使用QVariant::isNull()而不是转换为字符串。

关于c++ - QSettings中的QStrings isNull是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63358696/

相关文章:

c++ - 在 TableView 中单击一行时显示在行中编辑字段

c++ - 如何在 C++ 中实现传递函数的控制系统 block ?

android - 什么是 carotene_o4t,为什么它会导致在 Android 上使用 opencv 和 Qt 编译程序时出现问题?

c++ - 在生成的线程中启动进程

c++ - 在 MousePressEvent 中使用 QDialog

c++ - PyQt4 OpenGL : Enabling OpenGL Core Profile

c++ - 链表 - 覆盖数据

c++ - 维度变大时出现矩阵计算错误

c++ - 当我们在 C++ 中有关键字 "auto"时,为什么需要多态性

Qt:如何从内存中清理 QImage