2011-04-24 24 views
2

我注意到,在一个Qt应用main.cpp必须包含以下行:的Qt - QApplication的应用程序(的argc,argv的)

QApplication app(argc, argv);

我知道argc是命令行参数的个数,和argv是命令行参数的数组列表。但是,我脑海中的问题是:我传递给构造函数的那些参数是什么,同时又无法明确地看到?那里的情景背后有什么工作?

谢谢。

+1

当你说你不能明确地看到它们时,你是什么意思? – Troubadour 2011-04-24 11:11:19

+0

为什么会看到?这些是程序的参数,你可以给它们任何名字,甚至可以发出它们。它应该如何看待你是否没有把它传递下去。这些不是全局参数,而是本地参数(就像函数的任何属性一样)。 – SinistraD 2011-04-24 11:14:23

+0

我的意思是我们传递了什么?我们传递的理由是什么?它们的数量是多少? – Simplicity 2011-04-24 11:42:17

回答

2

没有隐藏的论据。您可以明确地看到每个参数 - argc, argv。在幕后的那行代码中没有任何东西。

+0

我的意思是我们传递了什么?我们传递的理由是什么?它们的数量是多少? – Simplicity 2011-04-24 11:41:36

+0

@ user714961:argc和argv的值是在运行时确定的,我们不可能知道它们是什么。从概念上讲,它们是命令行参数。 – Puppy 2011-04-24 12:08:40

1

如果你问什么QApplication与参数,然后答案是in the docs。该页面列出了Qt识别的参数。

1

Qt应用程序支持一些命令行参数。例如Windows上的app.exe -style motif很有趣。基本上,在这个构造函数中,您将参数传递给QApplication类以便解析它们。

当然,你可以自由地在人间传递给QApplication的,就像这样:

int c=1; char** v = &argv[0]; QApplication app(c,v);这样的Qt将无法解析任何东西,也不会接受任何命令行参数。

关于argc和argv作用域,如果你通过QApplication,你可以从你想要的每个点访问它们。如果您没有将它们传递给QApplication,那么您必须保证让它们成为全局的。

+1

4.7中的文档明确指出'argc'不能为零,'argv'必须至少包含一个字符串。 – Troubadour 2011-04-24 17:00:05

+0

是的,我注意到他们更新了它。在现实生活中,argv(0)总是被定义的。所以你可以做这样的事情: 'int c = 1; char ** v =&argv [0]; QApplication应用程序(c,v);' – 2011-07-12 01:37:43

2

从看你的意见到其他答案,我认为你想知道传递给你的可执行文件的参数,如果你没有指定任何参数。我不确定它是否标准化或者例外可能是什么,但通常在这种情况下,argc将是1argv[0]将是一个字符串,它指定用于调用可执行文件的命令。

假设您的可执行文件名为app,并驻留在/home/user/appdir

如果您的当前目录是应用程序目录,并用'app'启动它,那么argc将是1argv[0]将是app

如果你是从应用程序的上一级目录,并./appdir/app调用它,然后argc1,我相信argv[0]appdir/app

如果你调用应用程序时指定参数;也许你想告诉你的应用程序输出像app debug这样的调试信息。在这种情况下,argc将为2argv[0]将为appargv[1]将为debug