9
#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

4 回答 4

12

线

QApplication app(argc, argv);

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

QApplication app = QApplication(argc, argv);
于 2012-07-09T13:03:42.997 回答
5

这是来自 Qt Docs 的引用:

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

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

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

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

所以,线

QApplication app(argc, argv);

创建 QApplication 类的实例。

于 2012-07-09T13:03:19.823 回答
3

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

当您编写时,QApplication app(argc, argv); 您正在创建app此类的一个对象,方法是使用argcand调用其构造函数argv

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

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

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

有关此类参数的示例,请尝试./yourProgramName --help在终端窗口中运行

于 2012-07-09T15:32:45.237 回答
2

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

如果您来自 C# 或 Java 之类的,请将其想象为

QApplication app = new QApplication( argc, argv );

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

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

于 2012-07-09T13:05:50.763 回答