阿罗哈,
我正在开发一个小型的服务器管理器"为我自己使用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
答案 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");