Qt在应用程序类中拦截Application :: exec?

时间:2011-07-01 05:32:31

标签: c++ qt

在调用QCoreApplication::exec()时,是否有某种方法可以在我的应用程序类(派生自QApplication)中调用函数?我没有看到在消息循环开始之前生成的任何信号或事件。

我有各种要创建的组件,它们依赖于完全构造函数的应用程序对象。反过来,需要在这些组件之后创建一些其他组件(因为它们依赖于它们) - 然而这些组件是应用程序中的主要对话框,因此必须启动它们。

目前我只是从应用程序构造函数发布一个排队信号,然后在事件循环开始后处理。我只是想知道是否有更明确的方法来拦截exec

1 个答案:

答案 0 :(得分:1)

这是gui应用程序中的一项老技术,但它可能对你有用。

使用QObject::startTimer(0)然后重新实现QObject :: timerEvent()以获得various components that rely on a fully constructed application object。通过这样做,只有在事件循环开始时才会创建various components that rely on a fully constructed application object

一点解释:QObject :: startTimer(int ms )是一个以毫秒为单位运行计时器的函数,它触发每个 ms 。如果传递“0”作为参数,则一旦事件循环开始就会触发。一旦它触发,它调用QObject :: timerEvent()在同一个类中调用QObject :: startTimer()。确保在重新实现QObject :: timerEvent()时使用QObject :: killTimer()停止计时器,否则计时器将无限启动。

但@Mat有一个观点,因为事件循环尚未启动,并不意味着QCoreApplication没有完全构建。试着看看这个。

{
  QApplication app(argc, argv); //this is already a fully contructed QApplication instance
  MyClass *myObject = new MyClass; //this relies on a fully constructed QApplication instance

  return app.exec(); //this starts the event loop as you already know.
}