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