gpt4 book ai didi

c++ - QT 应用程序通过 qApp-> 属性使用 QSettings 实例崩溃

转载 作者:行者123 更新时间:2023-11-28 06:48:54 27 4
gpt4 key购买 nike

你好,

我正在使用 QT (C++) 为自己开发一个小型“ServerManager”。到目前为止一切正常:

我使用 QSettings存储所有相关设置(如服务器、已安装的插件等)。

因为我不想实例化 QSettings我必须在任何地方使用它,我想我可以尝试在 main.cpp 中实例化它一次并使用 qApp->setProperty() 使其可用方法。

我如何设置 QSettings类:

QSettings* Settings = new QSettings(".\\Settings.ini", QSettings::IniFormat);

我如何“发布”它:

qApp->setProperty("Settings", QVariant::fromValue<QSettings*>(Settings));

最后。如果我这样使用它:

QSettings* Settings = qApp->property("Settings").value<QSettings*>();
Settings->beginGroup("Servers");

整个应用程序崩溃了 SIGSEGV信号(段错误)。

堆栈跟踪:Stacktrace http://host-it.tk/Upload/53ab11da0d706/37.PNG

我真的不知道为什么会这样。也许解决方案很明显,但这是我的“第一个真正的”应用程序。

我好像得到了众所周知的“隧道 View ”。

感谢您的宝贵时间!

相关代码部分:http://pastebin.com/VzZ9uuJi

QT 版本:5.2.1

最佳答案

由于 QSettings* 不是通常的 QVariant 类型,您必须声明它。

    Q_DECLARE_METATYPE(QSettings*);

不过,这不是共享 QSettings 的常用方式。由于它是 INI 格式,考虑只将位置传递给 INI 文件用绝对路径代替:

    QFileInfo path(".\\Settings.ini");
qApp->setProperty("SettingsLocation", path.absoluteFilePath());

然后:

    QSettings Settings(qApp->property("SettingsLocation").toString(), QSettings::IniFormat);
Settings.beginGroup("Servers");

关于c++ - QT 应用程序通过 qApp-> 属性使用 QSettings 实例崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24415782/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com