修改QT在C ++文件中定义.pro文件

时间:2017-03-31 15:08:02

标签: c++ qt

很抱歉,如果这个问题没有任何意义,但我刚刚想到,我在很长一段时间内都在寻找解决方案,但最后我想更好地与专家联系。 :)

以下是一个场景:

  1. 假设在myProject.pro文件中,我有       路径= / home / local / Projects / 我使用以下方法创建了QT DEFINE:  DEFINES + = PATH = \\" $$ {PATH} \\"
  2. 现在,我可以使用这个" PATH"我的项目中基于CPP文件的任何位置。如果完全没问题的话。

  3. 现在,根据用户的输入,我想改变这个" PATH" 说,PATH可以是:     PATH = / home / local / Projects / TEST1 /

    PATH = /home/local/Projects/TEST2/
    
            and revert to
    
    PATH = /home/local/Projects/
    
  4. 所以,无论我在哪里使用这个" PATH"在我的项目中将自动更改。

    我知道这是在编译时完成的。但是想到了。所以想得到专家的反馈。

2 个答案:

答案 0 :(得分:0)

你所谓的“Qt define”实际上是预处理器宏,它是在命令行中给编译器的,而不是将它包含在带#define的源代码文件中。您可以使用它作为文字来初始化具有“默认”值的全局变量,如果不是const,则可以在代码中更改。

答案 1 :(得分:0)

一种简单的方法:使用全局配置对象,该对象将PATH文字的值作为其path成员的默认值。然后,用户可以更改该默认值:

class Configuration {
  Q_DISABLE_COPY(Configuration)
  static Configuration * self;
public:
  static Configuration * instance() { return self; }
  Configuration() {
    Q_ASSERT(!self);
    self = this;
  }
  ~Configuration() { self = {}; }

  QString path{PATH};
};

Configuration * Configuration::self;

int main(int argc, char ** argv) {
  Configuration configuration;
  QApplication app{argc, argv};
  ...
  qDebug() << Configuration::instance()->path;
}

每当您希望全局访问配置时,请使用Configuration::instance()静态方法获取实例,然后使用其path成员。默认设置为硬编码PATH,但您可以随时更改。

Configuration::instance()实现与QCoreApplication::instance()相同的习语:它允许您访问全局唯一值,而不会受到静态初始化顺序惨败的影响。