QSetting配置文件的使用
2018-04-03 17:15
281 查看
1.在工程构架中,我们经常需要接触一些动态会变化的信息,比如所要链接数据库的信息,所要接收发送信息的服务器的信息,甚至是自定义的一些字符串。如果都将这个写入代码,显然不是好的方法。于是,我们将这些可能会变的信息写入一个配置文件,程序在运行的时候动态的读取,降低工程耦合度。以我自己写的一个测试程序为例子:
#define AppConfig "MyAppConfig.ini"
#define AppLog "MyAppLog.log"
#define PLUGIN_DIR "MyPlugins"
class MyApp : public QApplication
{
Q_OBJECT
public:
static MyApp *getInstance()
{
return qobject_cast<MyApp *>(qApp);
}
public:
MyApp(int& argc, char **argv, int = ApplicationFlags);
~MyApp();
private:
Ui::MyProductionClass ui;
public:
enum MyAppState
{
CREATED = 0, //starting state.
UPDATING, //程序更新中
UPDATED, //程序更新完成
LOADING, //加载中
STARTING, //启动中
OPERATING, //执行中
LOGGING_OUT, //登出
QUITING, //退出
};
public:
QStackedLayout* m_StackedLayout;
//主窗口
MyAppMainWindow* m_MainWnd;
//登陆界面
MyAppLogin* m_Login;
//程序启动画面类
QSplashScreen* m_AppSplash;
//主窗口里面的中心控件
CentralWidget * m_central_widget;
//////////////////////////////////////////
char* _application_dir;//当前应用程序的目录
QTimer* m_pTimer_check_update;
std::string _local_ip; //本地IPv4地址
QReadWriteLock _lock;//读写锁
static QFile * m_pFileLog;//file for log
bool m_isAppStateChanged;
MyAppState m_AppState;
QString _plugins_dir;
QByteArray _msgsvr_url;
QByteArray _msgsvr_username;
QByteArray _msgsvr_passwd;
QByteArray _client_addr;
QByteArray _last_login_name;//上次登陆名
QByteArray _last_login_pwd;//上次登陆密码
QByteArray _user_name;//用户名
QTimer* checkStateTimer;
QByteArray m_FirstAnswer;//读取配置文件测试用例
QByteArray m_SecondAnswer;//读取配置文件测试用例
QByteArray m_LastLoginAnswer;//读取配置文件测试用例
public:
void achieveLocalIp();//获取本地IPv4地址
bool StartApp();
void CreateLogFile();
bool read_config();
void load_local_libraries(QString app_dir);
bool MyApp::loadLibrary(QString file_path, QString *error_msg);
static void messageHandle(QtMsgType type, const char *msg);
bool notify(QObject *obj, QEvent *e);//重写事件通知
QSettings* m_Config;
};
#endif // MYPRODUCTION_H
然后在实现文件中:
一般一个Qt应用程序一个app,所以我们将App设置为单例模式;
m_Config=new QSettings(QApplication::applicationDirPath() + "\\" + AppConfig, QSettings::IniFormat, NULL);
![](https://img-blog.csdn.net/20180403170757334?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3OTA5NTUz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
这样就将配置文件内容写入我们的m_Config里面去了;
然后在其他模块需要使用的时候,就可以直接读取了,比如我们要读取保存的password,123456,就按照图示方式写入和读取,比如在读取我的数据库模块里面:
QSettings* cfg=MyApp::getInstance()->m_Config;
m_CurrentDataBase.setDatabaseName(QString("DRIVER={SQL SERVER};"
"SERVER=%1;" //服务器名称
"DATABASE=%2;"//数据库名
"UID=%3;" //登录名
"PWD=%4;" //密码
).arg(cfg->value("ContentTest/DataBaseAddress", "").toString()) //数据库地址
.arg(cfg->value("ContentTest/DataBaseName", "").toString()) //数据库名称
.arg(cfg->value("ContentTest/DataBaseUser", "").toString()) //登陆的用户名
.arg(cfg->value("ContentTest/DataBasePassword", "").toString()) //登陆的密码
);
这样就根据配置文件的信息连接上对应的数据库了。
简单方便实用!!!So easy!
#define AppConfig "MyAppConfig.ini"
#define AppLog "MyAppLog.log"
#define PLUGIN_DIR "MyPlugins"
class MyApp : public QApplication
{
Q_OBJECT
public:
static MyApp *getInstance()
{
return qobject_cast<MyApp *>(qApp);
}
public:
MyApp(int& argc, char **argv, int = ApplicationFlags);
~MyApp();
private:
Ui::MyProductionClass ui;
public:
enum MyAppState
{
CREATED = 0, //starting state.
UPDATING, //程序更新中
UPDATED, //程序更新完成
LOADING, //加载中
STARTING, //启动中
OPERATING, //执行中
LOGGING_OUT, //登出
QUITING, //退出
};
public:
QStackedLayout* m_StackedLayout;
//主窗口
MyAppMainWindow* m_MainWnd;
//登陆界面
MyAppLogin* m_Login;
//程序启动画面类
QSplashScreen* m_AppSplash;
//主窗口里面的中心控件
CentralWidget * m_central_widget;
//////////////////////////////////////////
char* _application_dir;//当前应用程序的目录
QTimer* m_pTimer_check_update;
std::string _local_ip; //本地IPv4地址
QReadWriteLock _lock;//读写锁
static QFile * m_pFileLog;//file for log
bool m_isAppStateChanged;
MyAppState m_AppState;
QString _plugins_dir;
QByteArray _msgsvr_url;
QByteArray _msgsvr_username;
QByteArray _msgsvr_passwd;
QByteArray _client_addr;
QByteArray _last_login_name;//上次登陆名
QByteArray _last_login_pwd;//上次登陆密码
QByteArray _user_name;//用户名
QTimer* checkStateTimer;
QByteArray m_FirstAnswer;//读取配置文件测试用例
QByteArray m_SecondAnswer;//读取配置文件测试用例
QByteArray m_LastLoginAnswer;//读取配置文件测试用例
public:
void achieveLocalIp();//获取本地IPv4地址
bool StartApp();
void CreateLogFile();
bool read_config();
void load_local_libraries(QString app_dir);
bool MyApp::loadLibrary(QString file_path, QString *error_msg);
static void messageHandle(QtMsgType type, const char *msg);
bool notify(QObject *obj, QEvent *e);//重写事件通知
QSettings* m_Config;
};
#endif // MYPRODUCTION_H
然后在实现文件中:
一般一个Qt应用程序一个app,所以我们将App设置为单例模式;
m_Config=new QSettings(QApplication::applicationDirPath() + "\\" + AppConfig, QSettings::IniFormat, NULL);
这样就将配置文件内容写入我们的m_Config里面去了;
然后在其他模块需要使用的时候,就可以直接读取了,比如我们要读取保存的password,123456,就按照图示方式写入和读取,比如在读取我的数据库模块里面:
QSettings* cfg=MyApp::getInstance()->m_Config;
m_CurrentDataBase.setDatabaseName(QString("DRIVER={SQL SERVER};"
"SERVER=%1;" //服务器名称
"DATABASE=%2;"//数据库名
"UID=%3;" //登录名
"PWD=%4;" //密码
).arg(cfg->value("ContentTest/DataBaseAddress", "").toString()) //数据库地址
.arg(cfg->value("ContentTest/DataBaseName", "").toString()) //数据库名称
.arg(cfg->value("ContentTest/DataBaseUser", "").toString()) //登陆的用户名
.arg(cfg->value("ContentTest/DataBasePassword", "").toString()) //登陆的密码
);
这样就根据配置文件的信息连接上对应的数据库了。
简单方便实用!!!So easy!
相关文章推荐
- 调试番外篇 - KGDB环境搭建与使用
- ASP.NET中使用Nhibernate
- 使用mysqldump导入导出MySQL数据库
- 使用WebContainer中的Spring 常用方法
- 在Go语言中使用JSON
- 创建和使用静态库和动态库
- 无线监听工装使用说明
- 嵌入式上UC/OS - II使用注意点------任务调度
- 欢迎使用CSDN-markdown编辑器
- Struts2使用19 -- 注解配置1 -- Action注解配置
- 【ERROR_5】php中使用正则
- QuickTest Professional 11 破解 QTP11破解 无限使用30天 无需卸载. windows win7
- iframe给主页面元素赋值【使用jquery获取页面数据】
- Qt生成动态库及其使用(类似C语言方式的)
- 34.Silverlight中不得不了解使用的依赖属性
- FindWindowEx使用方法
- Ubuntu 10.04使用Wine安装Source Insight 来源:Linux社区 作者:linuxfx
- sqlite3触发器的使用
- 小试python-MySQLdb 安装和使用
- 使用 ResultSet 遍历查询结果(返回list结果集,重新toString()方法)