我希望在我的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();
...