“QApplication app(argc, argv)”想做啥?

Posted

技术标签:

【中文标题】“QApplication app(argc, argv)”想做啥?【英文标题】:What is "QApplication app(argc, argv)" trying to do?“QApplication app(argc, argv)”想做什么? 【发布时间】:2012-07-09 13:01:26 【问题描述】:
#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 类型的变量的函数?

【问题讨论】:

【参考方案1】:

线

QApplication app(argc, argv);

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

QApplication app = QApplication(argc, argv);

【讨论】:

为什么该语句不需要“new”关键字 QApplication app = new QApplication(argc, argv); @DScript:使用new,您将在堆上动态分配一个对象。当您使用 new 时,您会得到一个指针。所以你必须这样做:QApplication* app = new QApplication(argc, argv);【参考方案2】:

这是来自 Qt Docs 的引述:

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

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

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

可以通过 instance() 函数访问 QApplication 对象 它返回一个与全局 qApp 指针等效的指针。

所以,这条线

QApplication app(argc, argv);

创建一个 QApplication 类的实例。

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

app() 不是函数,它是构造函数调用。

如果你来自 C# 或 Java 什么的,想象一下它是

QApplication app = new QApplication( argc, argv );

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

简而言之,Qt 需要一个 QApplication 实例来运行,以便处理信号和插槽(如果您正在使用它们)并处理诸如绘画等事件

【讨论】:

以上是关于“QApplication app(argc, argv)”想做啥?的主要内容,如果未能解决你的问题,请参考以下文章