不同文件的类成员变量的访问

不在一个文件里的两个类,其中一个类的成员函数访问另一个类的成员变量。

主要体现在读取配置文件,我们希望程序模块化、低耦合,为解析配置文件的函数单独建一个文件,方便以后复用。

如读取配置文件的头文件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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值