Qt從5.2版開始提供了兩個類QCommandLineOption和QCommandLineParser來解析應用的命令行參數。spa
1、命令行寫法
命令行:"-abc".net
在QCommandLineParser的解析模式爲ParseAsCompactedShortOptions(默認)時會被認爲是3個參數,即"-a"、"-b"和"-c"命令行
- QCommandLineOption op1("a");
- QCommandLineOption op2("b");
- QCommandLineOption op3("c");
-
- QCommandLineParser parser;
- parser.addOption(op1);
- parser.addOption(op2);
- parser.addOption(op3);
- parser.process(a);
-
- qDebug() << parser.isSet(op1);
- qDebug() << parser.isSet(op2);
- qDebug() << parser.isSet(op3);
反之,當解析模式爲ParseAsLongOptions時,"-abc"會被認爲是1個長命令,即"-abc"code
可是因爲長命令應該是以"--"開頭,因此下面的代碼會出現異常,提示"未知的選項"blog
- QCommandLineOption op1("a");
- QCommandLineOption op2("b");
- QCommandLineOption op3("c");
-
- QCommandLineParser parser;
- parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions);
- parser.addOption(op1);
- parser.addOption(op2);
- parser.addOption(op3);
- parser.process(a);
Qt推薦使用ParseAsCompactedShortOptions模式,這也是默認的解析模式。而ParseAsLongOptions模式則是爲了兼容而存在。ip
2、帶值的命令文檔
命令行參數一般就分爲兩種,帶值的和不帶值的。不帶值的就直接註冊一個命令就好了,好比上面的字符串
- QCommandLineOption op1("a");
咱們能夠把這個"-a"理解爲一個bool類型的命令。若是須要帶值,則把值寫在命令後面便可,值和命令之間用等號或空格隔開,字符串能夠用雙引號括起來get
-a ABC
-a=ABC
繼續看一段代碼,假設命令行爲"-a="C:/A B/Demo.exe""qt
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
-
-
- QCommandLineOption op1("a");
- QCommandLineParser parser;
- parser.addOption(op1);
- parser.process(a);
- qDebug() << parser.isSet(op1);
- qDebug() << parser.value(op1);
-
- MainWindow w;
- w.show();
-
- return a.exec();
- }
因爲咱們定義的op1並無說明其會有參數,而實際的命令行後面跟了個參數,解析器就會報錯。Qt文檔中也表示,解析器不支持可選參數。
若是須要附帶參數,則必須指定一個指望值
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
-
-
- QCommandLineOption op1("a");
- op1.setValueName("path");
- QCommandLineParser parser;
- parser.addOption(op1);
- parser.process(a);
- qDebug() << parser.value(op1);
-
- MainWindow w;
- w.show();
-
- return a.exec();
- }
設置了ValueName後,解析器就會認爲此命令帶值,將會認爲下一個等號或空格後的值就是參數
這個ValueName名字隨便取,只是起到一個指導性的做用。你甚至能夠將它設置爲"abc"
另外,值能夠有多個
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
-
-
- QCommandLineOption op1("a");
- op1.setValueName("test");
- Q CommandLineParser parser;
- parser.addOption(op1);
- parser.process(a);
- qDebug() << parser.values(op1);
-
- MainWindow w;
- w.show();
-
- return a.exec();
- }
還有QCommandLineParser的addHelpOption()、addVersionOption()都是添加顯示命令版本和幫助用的,通常只有命令行程序纔會用到吧,就不細說了。
解析能夠用parse()方法或process()方法,前者遇到不可解析的命令會返回false但不會拋出異常,後者則會拋出異常。
最後,看一個比較完整的示例
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
-
- QCommandLineOption op1("a");
- QCommandLineOption op2("BBB");
- QCommandLineOption op3(QStringList() << "c" << "CCC");
- QCommandLineOption op4("D", "", "Name");
- QCommandLineOption op5("Age", "", "", "18");
- QCommandLineOption op6("m", "", ".");
-
- QCommandLineParser parser;
- parser.addOption(op1);
- parser.addOption(op2);
- parser.addOption(op3);
- parser.addOption(op4);
- parser.addOption(op5);
- parser.addOption(op6);
- parser.process(a);
-
- qDebug() << parser.isSet(op1);
- qDebug() << parser.isSet("BBB");
- qDebug() << parser.isSet("CCC");
- qDebug() << parser.value(op4);
- qDebug() << parser.value(op5);
- qDebug() << parser.values(op6);
-
- qDebug() << parser.helpText();
- MainWindow w;
- w.show();
-
- return a.exec();
- }
http://blog.csdn.net/aqtata/article/details/30485963