2

打电话是否有效,qApp->exec()或者QCoreApplication::exec()我正在使用QApplication实例?由于它是一个静态函数,因此在这两种情况下QCoreApplication::exec()都会被调用。但是,似乎即使我调用其中一个,我QApplication的基于程序也可以正常工作-这只是运气/巧合还是有效?

谢谢你的帮助!

4

3 回答 3

1

QT 在 QApplication 上使用单例模式,因此您的所有调用最终都会调用 QApplication 的单个实例。为什么他们选择把 qApp 放在一边很奇怪,但它似乎是输入最短的字符串。我更喜欢保留指向您自己创建的原始 QApplication 的指针。

于 2015-10-24T22:19:42.833 回答
1

简短的回答:

这不是运气,因为静态函数的行为也应该像普通的非虚拟函数一样。

长答案:

静态函数是不使用this指针的成员函数。当你从一个对象调用它时,它的行为就像一个普通的成员。

由于 QAppliction 是从 QCoreApplication 派生的,而 exec() 是 QCoreApplication 的成员,它也是从 QCoreApplication 派生的类型的对象的成员。

qApp 返回一个指向 QApplication 对象的指针,该对象也是一个 QCoreApplication,因此它也包含 exec()。

于 2015-10-24T21:44:49.000 回答
1

qApp简直就是一个#defineto QCoreApplication::instance()。你使用它所做的一切qApp就是告诉编译器在哪里找到exec()函数。但是因为exec()它是一个静态函数,所以它不是通过对象调用的,即使你的代码使它看起来像它。所以从编译器的角度来看qApp->exec()应该是完全等价的。QCoreApplication::exec()也就是说,我不知道qApp在这种情况下 C++ 标准是否需要为非空,即使它在技术上不需要使用。

于 2015-10-24T22:14:08.133 回答