我注意到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发布于 2020-08-11 13:11:12
文档中的注释:“出于历史原因,Qt对空字符串和空字符串进行了区分。我认为最好不要依赖这种区分。与其设置空字符串,不如完全不设置选项(或者明确地取消设置)。
QSettings无法存储空字符串的实际原因很可能是存储格式不支持这一点。存储设置的一种常见格式是INI格式(请参阅这里),它无法区分空和空。
除此之外,我将使用QVariant::isNull(),而不是转换为string。
发布于 2020-08-11 13:10:42
尝试键入settings.value("string").isNull()而不是settings.value("string").toString().isNull()。因为您尝试转换为字符串类型为空值。
我用这个(如何将QString初始化为null?)帖子来回答你
https://stackoverflow.com/questions/63358696
复制相似问题