在创建QApplication对象之前创建QStatemachine对象可以吗?

时间:2018-09-29 09:35:07

标签: qt

我正在使用Qt5创建一个Qt应用程序。

以下是我的代码:

static QStateMachine *myStateMachine = new QStateMachine(nullptr);

我只想创建QStateMachine一次,全部使用同一台机器 时间。

但是,我了解到在实例化QApplication之前不应该实例化所有QObject。您可以阅读Qt document了解QApplication的详细说明。

我的问题是:

为什么在实例化QApplication之前不应该实例化所有QObject?

1 个答案:

答案 0 :(得分:0)

Thiago Macieira在2014 thread on the Qt interest list中写道:

  在创建QCoreApplication之前不支持

Qt。您的用例不受支持,因此不需要答案。

     

别这么做。

     

注意:文档有误。

He's a long-term Qt maintainer(曾在Trolltech工作)。因此,我通常会听从他的建议。

我想他的意思是在各种系统上-功能最终需要某种形式的初始化机会。可能不是所有系统,并且可能是在更高版本中引入的需求。因此,Qt开发人员可能保留使任何给定功能需要它的权利...,并且不保证系统中的任何在初始化之前都会起作用。

(注意:与undefined behavior in C++的概念类似)

但是,他稍微软化了立场in a later post

  
    

这是否也不支持静态对象?

  
     

不受支持,但大多数情况下它们可以工作。我们还将在创建QCoreApplication之前解析命令行和其他设置过程的同时修复main()中可能合理使用的错误。

     

请小心,因为某些事情将无法正常工作。例如,QString :: fromLocal8Bit在QCoreApplication之前不起作用。

要点是,列出今天QApplication实例化之前可以做的事情应该被误导。他们不想列入清单。

如果您发现确实需要执行此操作,并且看起来似乎不满意,那么请准备好使其在将来的版本中突破(甚至可能在其他计算机上)。