什么是“QApplication app(argc,argv)”试图做什么?

时间:2012-07-09 13:01:26

标签: c++ qt qml

#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类型的变量的函数?

4 个答案:

答案 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);时 您正在通过使用appargc

调用其构造函数来创建此类的对象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实例,以便处理信号和插槽(如果您正在使用它们)并处理诸如绘画等事件