不同文件的类成员变量的访问
来源:互联网 发布:qq头像源码大全 编辑:程序博客网 时间:2024/06/05 01:07
不在一个文件里的两个类,其中一个类的成员函数访问另一个类的成员变量。
主要体现在读取配置文件,我们希望程序模块化、低耦合,为解析配置文件的函数单独建一个文件,方便以后复用。
如读取配置文件的头文件xmlparse.h
#ifndef XMLPARSE_H
#define XMLPARSE_H
#include <QString>
class XMLParse
{
public:
XMLParse();
~XMLParse();
bool xmlParse(QString);
public:
QString m_serverIP;
QString m_dbNmae;
QString m_userName;
QString m_password;
};
#endif // XMLPARSE_H
xmlparse.cpp
#include "xmlparse.h"
#include <QDomElement>
#include <QFile>
#include <QDebug>
XMLParse::XMLParse()
{
// QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
QFile *file;
QString filename = "Config.xml";
if(file->exists("Config.xml"))
{
xmlParse(filename);
}
}
XMLParse::~XMLParse()
{
//normal, do nothing
}
bool XMLParse::xmlParse(QString fileName)
{
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly | QFile::Text))
qDebug() << "open for read error..." ;
QString errorStr;
int errorLine;
int errorColumn;
QDomDocument doc;
if (!doc.setContent(&file, false, &errorStr, &errorLine, &errorColumn))
{
qDebug() << "setcontent error..." ;
file.close();
}
file.close();
QDomElement root = doc.documentElement();
if (root.tagName() != "serverConfig")
{
qDebug()<<"root.tagname != serverConfig..." ;
}
QDomNode ipNode = root.firstChildElement("db_serverIP");
m_serverIP = ipNode.toElement().text();
QDomNode nameNode = root.firstChildElement("db_Name");
m_dbNmae = nameNode.toElement().text();
QDomNode userNode = root.firstChildElement("db_userName");
m_userName = userNode.toElement().text();
QDomNode passwordNode = root.firstChildElement("db_password");
m_password = passwordNode.toElement().text();
return true;
}Config.xml
<?xml version='1.0' encoding='GB2312'?>
<serverConfig>
<db_serverIP>192.168.2.11</db_serverIP>
<db_Name>talkback</db_Name>
<db_userName>root</db_userName>
<db_password>root</db_password>
</serverConfig>
如果在另一个文件的类里要使用xmlparse读取的配置数据,直接在其成员函数里声明xmlparse类对象是无法访问xmlparse成员变量的。
可在要使用配置数据的类中声明全局xmlparse类对象,这样在其成员函数中就可正常调用xmlparse成员变量。
如另一个类.h
class Database
{
public:
Database();
~Database();
public:
static bool openDatabase(); //打开数据库
static void closeDatabase();// 关闭数据库
public:
static QSqlDatabase m_db;
};实现文件.cpp
QSqlDatabase Database::m_db = QSqlDatabase::addDatabase("QMYSQL");
XMLParse xmlparse;
bool Database::openDatabase()
{
QStringList driverList = QSqlDatabase::drivers();
// qDebug() <<"SUPPORT" <<driverList;
m_db.setHostName(xmlparse.m_serverIP);
m_db.setDatabaseName(xmlparse.m_dbNmae);
m_db.setUserName(xmlparse.m_userName);
m_db.setPassword(xmlparse.m_password);
bool ok = m_db.open();
if(!ok)
{
QMessageBox::critical(0, QObject::tr(" 连接数据库失败!!! "), m_db.lastError().text());
return false;
}
else
{
qDebug() << "open database successful";
return true;
}
}这样在使用xmlparse成员变量之前先声明全局类对象方可正常访问xmlparse类读取的配置数据。
0 0
- 不同文件的类成员变量的访问
- 类的两个不同实例如何相互访问对方的成员变量
- 类的成员变量的访问权限
- 同一个类的不同对象,对象的成员函数可以互相访问各自对象的私有变量和私有成员函数
- [C++]BOOST_PP_SEQ_FOR_EACH_I根据enum值访问类的不同成员
- 用不同的方法访问私有成员
- ios的属性和成员变量在.h文件和.m文件的不同
- ios的属性和成员变量在.h文件和.m文件的不同
- ios的属性和成员变量在.h文件和.m文件的不同
- 全局的callback函数访问一个类的成员变量
- OC中的属性和成员变量在.h文件和.m文件的不同
- 成员变量和成员方法对多态的不同
- 不同子类拥有基类的不同的静态成员变量的方法
- 父类指针对子类成员变量的访问
- 内联汇编访问类或结构的private 成员变量
- 访问C++类对象中私有成员变量的方法
- C++类中成员变量和函数的访问范围
- C++访问类中私有成员变量的方法
- Unable to instantiate fragment 的解
- RestEasy开发WebService一
- QProcess学习
- android 按HOME键后,再点击快捷图标,重新启动的问题
- dfs.client.file-block-storage-locations.timeout.millis引发的错误
- 不同文件的类成员变量的访问
- android studio 怎么导入library
- jenkins 部署入门
- Android 文件存储
- REST 理解
- Remove Duplicates from Sorted List
- 精益生产方式下在工程项目的成本管理
- QProcess 使用
- 20世纪中国耕地与复种指数的变化