在Qt编程中使用QSettings库为软件加上设置功能
在编写软件的时候,我们经常需要保存一些用户的设置,可以用数据库保存,也可以用文本保存。Qt提供了QSettings类实现这个功能,通过这个类保存的设置,在Windows上设置会被保存到注册表,在macOS上会被保存到属性列表文件,在Unix上通常会被保存到ini文件。
先来编写软件使用QSettings类的代码的头文件,在头文件引入QSettings。然后创建一个QSettings指针,定义好设定和获取设置的函数。
#include <QSettings> #include <QString> class Settings : public QObject {
Q_OBJECT
QSettings* settings; public: explicit Settings(QObject *parent = 0); Q_INVOKABLE void set_date_format(date_format f); Q_INVOKABLE int get_date_format(); };
然后是源代码文件。新建一个QSettings对象,两个参数分别是公司名称和产品名称,不过对于个人写的软件来说,填什么也没所谓啦。而无论是setValue还是value函数,都是以键值对的形式来操作,第一个参数是键,第二个参数是要设定或者获取到的值。
#include "settings.h" #include <qdebug.h> Settings::Settings(QObject *parent) { settings = new QSettings("Company name","Product name"); } void Settings::set_date_format(date_format f) { settings->setValue(QString("Date_format"),QVariant(f)); } int Settings::get_date_format() { return settings->value(QString("Date_format"),QVariant(0)).toInt(); }
编写好C++的代码,接下来就要让用户界面可以使用这些方法进行设置的保存和获取。要使QML可以使用C++的方法,类需要继承QObject,方法需要是public的,并且使用Q_INVOKABLE标记,就像上面写的那样。接下来,在软件的main函数将C++的类注册到QML中。
int main(int argc, char *argv[]) { QScopedPointer<QGuiApplication> app(SailfishApp::application(argc,argv)); QScopedPointer<QQuickView> view(SailfishApp::createView()); qmlRegisterType<Settings>("abc.settings",1,0,"Settings"); QObject::connect(view->engine(),SIGNAL(quit()),qApp,SLOT(quit())); view->setSource(SailfishApp::pathTo("qml/abc.qml")); view->show(); return app->exec(); }
使用qmlRegisterType方法注册,第一个参数是在QML中import用到的名字,第二和第三个参数是版本号,第四个参数是QML中类的名字。写好这个部分,就可以在QML中使用这个类,创建一个对象了。
import QtQuick 2.2 import Sailfish.Silica 1.0 import abc.settings 1.0 Dialog { id: settingsDialog property int date_format: settings.get_date_format() ...... onAccepted: { settings.set_date_format(date_format) } }
这样就完成C++与QML的交互,实现用户界面保存和获取设置。

浙公网安备 33010602011771号