#include <QtGui/QApplication>
#include <QtDeclarative>
#include "qmlapplicationviewer.h"
int main(int argc, char **argv) {
QApplication app(argc, argv);
QmlApplicationViewer viewer;
viewer.setMainQmlFile("app/native/assets/main.qml");
viewer.showFullScreen();
return app.exec();
}
我的C ++有点生疏。有人可以向我解释一下“QApplication app(argc,argv)”试图做什么?
是否尝试声明一个接受2个参数(argc和argv)并返回QApplication类型的变量的函数?
答案 0 :(得分:10)
该行
QApplication app(argc, argv);
创建一个类型为QApplication
的新实例,并调用此类的构造函数。在您的示例中,变量app
现在存储此实例。它在某种程度上是(语义上)的简写:
QApplication app = QApplication(argc, argv);
答案 1 :(得分:4)
以下是Qt Docs的引用:
QApplication类管理GUI应用程序的控制流程和 主要设置。
QApplication包含主事件循环,其中包含所有事件 窗口系统和其他来源被处理和发送。它也是 处理应用程序的初始化,完成和提供 会话管理。此外,QApplication处理大部分问题 系统范围和应用程序范围的设置。
对于使用Qt的任何GUI应用程序,只有一个QApplication 对象,无论应用程序是否有0,1,2或更多窗口 在任何给定的时间。对于非GUI Qt应用程序,请使用QCoreApplication 相反,因为它不依赖于QtGui库。
可以通过instance()函数访问QApplication对象 返回一个等同于全局qApp指针的指针。
所以,行
QApplication app(argc, argv);
创建QApplication类的实例。
答案 2 :(得分:2)
QApplication是一个包含主事件循环的Qt类。
当你写QApplication app(argc, argv);
时
您正在通过使用app
和argc
argv
在运行程序时调用int main(int argc, char **argv)
时,int argc
初始化为包含运行程序时传递的参数数。 char **argv
包含执行时传递给程序的参数数组。
char * argv [0]将包含(指向)程序的名称,而后续元素将指向传递的其他参数。
argc和argv依次传递给QApplication的构造函数,以便在运行程序时可以传递Qt特定的参数。
有关此类参数的示例,请尝试在终端窗口中运行./yourProgramName --help
答案 3 :(得分:1)
app()不是函数,它是构造函数调用。
如果您来自C#或Java或其他什么,请将其想象为
QApplication app = new QApplication( argc, argv );
只是那个应用程序会以这种方式指针,而实际上它就是对象本身,如果它是像你的例子那样创建的。
简而言之,Qt需要运行QApplication
实例,以便处理信号和插槽(如果您正在使用它们)并处理诸如绘画等事件