2011-04-24 23 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