项目中的C++全局常量



我希望在我的Qt C++项目中有一个包含所有全局变量的文件。

类似于:mainvar.h

我可以将其包含在需要访问全局变量的文件中。

它们会在我的设置文件所在的地方保存常量,在那里我可以找到样式表和其他东西。

目前我有一个头文件,但得到了双重定义的链接器错误:LNK2005。

然后是#define和extern。。。

最现代的解决方案是什么?我应该如何处理?问题是,我还不知道我会有多少全局变量。

我来自PHP,那里的情况略有不同。期待您的帮助。

第1版:

好的,在评论之后,这里有一些代码:我已经弹出了旧代码,所以这已经保存了第一个注释中的代码来创建一个类:

QFile settingsFile(GlobalSettings::getSettingsFileStr());
if (!settingsFile.exists())
{
    //create the settings file
    settingsFile.open(QIODevice::ReadWrite);
    settingsFile.close();
    loadSettings("://src/settings_default.ini");
}
else
{
    loadSettings("");
}

在这个设置文件中,我保存了用户关闭应用程序时是否显示TrayIcon的情况。

稍后我想在MainWindow类中使用此设置。例如:

QSettings settings(GlobalSettings::getSettingsFileStr(), QSettings::IniFormat);
if ( settings.value("general/trayIcon").toBool() )
{
    event->ignore();
    showTrayIcon();
    this->hide();
}

我希望编辑能增加清晰度。

祝你一切顺利,Richard

我想你想要的是:

mainvar.cpp

QString settingsFileStr; //some initialization too probably

主变量h

extern Qstring settingsFileStr;

main.cpp

#include <iostream>
#include "mainvar.h"
using namespace std;
int main(){
  //do stuff with settingsFileStr
}

然而,在另一个类中静态地包含设置也会做同样的事情,并且稍微更有组织性。

由于您正在使用C++和QT,我将提出以下解决方案(我认为它在源代码中更可读,并为扩展提供了一些灵活性)。。

global.h

#ifndef _GLOBALS_H
#define _GLOBALS_H
class Globals {
protected:
    static Globals * m_pInstance;
public:
    //Globals * instance();
    static Globals * instance();
    // your global setters/getter
    QString   getMyString();
    void setMyString(const QString & val);
protected:
    QString m_myString;
private:
    Globals();
};
#endif

globals.cpp

#include "globals.h"
Globals * Globals::m_pInstance  = NULL;
Globals * Globals::instance() {
      if (!m_pInstance)
          m_pInstance = new Globals();
      return m_pInstance;
}
Globals::Globals() {
   // whatever initialisation code you need to your global vars
}
QString Globals::getMyString() {
   return m_myString;
}
QString Globals::setMyString(const QString & str) {
    m_myStirng = str;
}
etc..

用法:

代码.cpp

#include "globals.h"
...
QString getMyVar = Globals::instance()->getMyString();
...

相关内容

  • 没有找到相关文章

最新更新