Qt读取配置文件的方法,主要用到了
QApplication::applicationDirPath()
QSettings
在建立的正式项目一般都会有配置文件,否则后期维护起来会很麻烦。无论它的扩展名是.ini、.cfg还是.properties等,只要文件中内容符合下面这个格式即可。databaseInfo.cfg文件是我在项目中建立的MySQL配置文件。
存放在项目中/config/目录下
[database]
HostName=127.0.0.1
Port=3306
UserName=root
Password=root
DatabaseName=test
在项目中建立类文件
configFile.h
#ifndef CONFIGFILE_H
#define CONFIGFILE_H
#include <QVariant>
#include <QSettings>
class configFile
{
public:
configFile();
bool fileName(QString qstrfilename);
virtual ~configFile(void);
void Set(QString,QString,QVariant);
QVariant Get(QString,QString);
private:
QString m_qstrFileName;
QSettings *m_psetting;
};
#endif // CONFIGFILE_H
configFile.cpp
#include "configFile.h"
#include <QDebug>
#include <QDir>
configFile::configFile()
{
}
bool configFile::fileName(QString qstrfilename)
{
if (qstrfilename.isEmpty())
{
m_qstrFileName = "databaseInfo.cnf";
}
else
{
m_qstrFileName = qstrfilename;
}
qDebug() << m_qstrFileName;
QDir dir;
if ( !dir.exists(m_qstrFileName) ){
qDebug() <<"没有找到 "<<m_qstrFileName<<" 配置文件。";
return false;
}
m_psetting = new QSettings(m_qstrFileName, QSettings::IniFormat);
return true;
}
configFile::~configFile()
{
delete m_psetting;
m_psetting = 0;
}
void configFile::Set(QString qstrNodeName,QString qstrKeyName,QVariant qvarvalue)
{
m_psetting->setValue(QString("/%1/%2").arg(qstrNodeName).arg(qstrKeyName), qvarvalue);
}
QVariant configFile::Get(QString qstrNodeName,QString qstrKeyName)
{
QVariant qvar = m_psetting->value(QString("/%1/%2").arg(qstrNodeName).arg(qstrKeyName));
return qvar;
}
调用的程序:
#include "MainWindow.h"
#include "ui_MainWindow.h"
#include "util/configFile.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
qDebug() <<"software path = " << QApplication::applicationDirPath();
QString qstrFileName=(QApplication::applicationDirPath()+"/config/databaseInfo.cfg");
configFile cfg;
if(!cfg.fileName(qstrFileName))
qDebug()<<"文件不存在,%1"<<qstrFileName;
QString strArray[5];
strArray[0] = cfg.Get("database","HostName").toString();
strArray[1] = cfg.Get("database","Port").toString();
strArray[2] = cfg.Get("database","UserName").toString();
strArray[3] = cfg.Get("database","Password").toString();
strArray[4] = cfg.Get("database","DatabaseName").toString();
for(int i=0;i<5;i++)
qDebug()<<strArray[i];
}
其中QApplication::applicationDirPath()返回项目的当前目录。
最后得到如下结果:
欢迎大家添加博主微信,备注“技术交流”,拉你进技术交流群