2017-03-31 58 views
-2

对不起,如果这个问题没有任何意义,但它只是在我的脑海中想到,我在很长一段时间寻找一个解决方案,但最终我想更好地与专家核对。 :)修改QT在C++文件中定义的.pro文件

下面是一个情景:

  1. 设在myProject.pro文件,我有 PATH = /家庭/本地/项目/ 为此,我创建了一个QT DEFINE使用以下: 定义+ = PATH = \\“$$ {PATH} \\”
  2. 现在,我可以使用这个“路径”任何地方在我的项目中基于CPP文件。这如果完全好。现在

  3. ,根据来自用户的输入,我想改变这种 “PATH” 说,路径可以是: PATH = /家庭/本地/项目/ TEST1/

    PATH = /home/local/Projects/TEST2/ 
    
         and revert to 
    
    PATH = /home/local/Projects/ 
    

因此,无论我在项目中使用此“路径”的位置都会自动更改。

我知道这是在编译时完成的。但有一个想法。所以想要得到专家的反馈。

回答

0

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

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()相同的习惯用法:它允许您访问全局唯一值,而不会受到静态初始化顺序失败的影响。