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

时间:2014-06-25 18:19:38

标签: c++ qt

阿罗哈,

我正在开发一个小型的服务器管理器"为我自己使用QT(C ++)。 任何工作到此为止:

我使用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:Stacktrace http://host-it.tk/Upload/53ab11da0d706/37.PNG

我真的不知道为什么会这样。 也许解决方案是显而易见的,但这是我的第一个真正的&#34;应用

好像我得到了众所周知的#34;隧道视图&#34;。

谢谢你的时间!

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

QT-Version:5.2.1

1 个答案:

答案 0 :(得分: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");