“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
,通过使用argc
和argv
调用其构造函数
当运行程序时调用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)”想做啥?的主要内容,如果未能解决你的问题,请参考以下文章