我注意到,在一个Qt
应用main.cpp
必须包含以下行:的Qt - QApplication的应用程序(的argc,argv的)
QApplication app(argc, argv);
我知道argc
是命令行参数的个数,和argv
是命令行参数的数组列表。但是,我脑海中的问题是:我传递给构造函数的那些参数是什么,同时又无法明确地看到?那里的情景背后有什么工作?
谢谢。
我注意到,在一个Qt
应用main.cpp
必须包含以下行:的Qt - QApplication的应用程序(的argc,argv的)
QApplication app(argc, argv);
我知道argc
是命令行参数的个数,和argv
是命令行参数的数组列表。但是,我脑海中的问题是:我传递给构造函数的那些参数是什么,同时又无法明确地看到?那里的情景背后有什么工作?
谢谢。
没有隐藏的论据。您可以明确地看到每个参数 - argc, argv
。在幕后的那行代码中没有任何东西。
我的意思是我们传递了什么?我们传递的理由是什么?它们的数量是多少? – Simplicity 2011-04-24 11:41:36
@ user714961:argc和argv的值是在运行时确定的,我们不可能知道它们是什么。从概念上讲,它们是命令行参数。 – Puppy 2011-04-24 12:08:40
如果你问什么QApplication
与参数,然后答案是in the docs。该页面列出了Qt识别的参数。
Qt应用程序支持一些命令行参数。例如Windows上的app.exe -style motif
很有趣。基本上,在这个构造函数中,您将参数传递给QApplication类以便解析它们。
当然,你可以自由地在人间传递给QApplication的,就像这样:
int c=1; char** v = &argv[0]; QApplication app(c,v);
这样的Qt将无法解析任何东西,也不会接受任何命令行参数。
关于argc和argv作用域,如果你通过QApplication,你可以从你想要的每个点访问它们。如果您没有将它们传递给QApplication,那么您必须保证让它们成为全局的。
4.7中的文档明确指出'argc'不能为零,'argv'必须至少包含一个字符串。 – Troubadour 2011-04-24 17:00:05
是的,我注意到他们更新了它。在现实生活中,argv(0)总是被定义的。所以你可以做这样的事情: 'int c = 1; char ** v =&argv [0]; QApplication应用程序(c,v);' – 2011-07-12 01:37:43
从看你的意见到其他答案,我认为你想知道传递给你的可执行文件的参数,如果你没有指定任何参数。我不确定它是否标准化或者例外可能是什么,但通常在这种情况下,argc
将是1
而argv[0]
将是一个字符串,它指定用于调用可执行文件的命令。
假设您的可执行文件名为app
,并驻留在/home/user/appdir
。
如果您的当前目录是应用程序目录,并用'app'启动它,那么argc
将是1
而argv[0]
将是app
。
如果你是从应用程序的上一级目录,并./appdir/app
调用它,然后argc
将1
,我相信argv[0]
会appdir/app
如果你调用应用程序时指定参数;也许你想告诉你的应用程序输出像app debug
这样的调试信息。在这种情况下,argc
将为2
,argv[0]
将为app
和argv[1]
将为debug
。
当你说你不能明确地看到它们时,你是什么意思? – Troubadour 2011-04-24 11:11:19
为什么会看到?这些是程序的参数,你可以给它们任何名字,甚至可以发出它们。它应该如何看待你是否没有把它传递下去。这些不是全局参数,而是本地参数(就像函数的任何属性一样)。 – SinistraD 2011-04-24 11:14:23
我的意思是我们传递了什么?我们传递的理由是什么?它们的数量是多少? – Simplicity 2011-04-24 11:42:17