什么是“QApplication应用程序(argc,argv)”试图做什么?

问题描述:

#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)”试图做什么?什么是“QApplication应用程序(argc,argv)”试图做什么?

它试图声明一个函数,它需要两个参数(argc和argv)并返回一个类型为QApplication的变量?

下面是从Qt的文档报价:

的的QApplication类管理GUI应用程序的控制流和 主要设置。

QApplication包含主事件循环,其中处理和分派来自 窗口系统和其他源的所有事件。它也 处理应用程序的初始化,最终化,并提供会话管理 。此外,QApplication处理大部分 系统范围和应用程序范围的设置。

对于任何使用Qt的GUI应用程序,只要有一个QApplication 对象,无论应用程序在任何给定时间是否有0,1,2或更多窗口 。对于非GUI Qt应用程序,请改用QCoreApplication ,因为它不依赖于QtGui库。

QApplication对象可通过实例()函数 访问,该函数返回与全局qApp指针等效的指针。

所以,行

QApplication app(argc, argv);

创建的QApplication类的一个实例。

线

QApplication app(argc, argv); 

创建QApplication类型的新实例,并调用这个类的构造函数。在你的例子中,变量app现在存储这个实例。这是有点(语义)一本简写:

QApplication app = QApplication(argc, argv); 
+1

为什么语句不需要“新”的关键字 的QApplication应用=新的QApplication(的argc,argv的); – DScript 2015-08-07 18:30:27

+1

@DScript:用'new'你可以动态地在堆上分配一个对象。当你使用'new'时,你会得到一个指针。所以你必须这样做:'QApplication * app = new QApplication(argc,argv);' – Constantinius 2015-08-07 19:06:08

应用程序()是不是一个功能,它是一个构造函数调用。

如果你来自C#或Java类的东西,把它想象成

QApplication app = new QApplication(argc, argv); 

只是该应用程序将是一个指针这种方式,而它实际上就是如果像在您的示例中创建的对象本身。

总之,QT需要QApplication实例来运行,因此信号&插槽被处理(如果你正在使用它们),并像绘画等事件的处理

QApplication的是包含主事件循环Qt的类。

当你写QApplication app(argc, argv); 你创建这个类的一个对象app,通过调用其构造与argcargv

int main(int argc, char **argv)运行程序时被调用,int argc被初始化为包含传递的参数数目同时运行该程序。 char **argv包含执行时传递给程序的参数数组。

char * argv [0]将包含(指向)程序的名称,而后续元素将指向传递的其他参数。

argc和argv依次传递给QApplication的构造函数,以便在运行程序时可以传递Qt特定的参数。

对于这种参数的一个例子尝试在一个终端窗口运行./yourProgramName --help