Qt从5.2版开始提供了两个类QCommandLineOption和QCommandLineParser来解析应用的命令行参数。
一、命令行写法
命令行:"-abc"
在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); // true qDebug() << parser.isSet(op2); // true qDebug() << parser.isSet(op3); // true
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); // 抛出异常,程序退出:Unknown option 'abc'.
二、带值的命令
命令行参数通常就分为两种,带值的和不带值的。不带值的就直接注册一个命令就行了,比如上面的
QCommandLineOption op1("a");
我们可以把这个"-a"理解为一个bool类型的命令。如果需要带值,则把值写在命令后面即可,值和命令之间用等号或空格隔开,字符串可以用双引号括起来
-a ABC
-a=ABC
继续看一段代码,假设命令行为"-a="C:/A B/Demo.exe""
int main(int argc, char *argv[]) { QApplication a(argc, argv); // -a="C:/A B/Demo.exe" QCommandLineOption op1("a"); QCommandLineParser parser; parser.addOption(op1); parser.process(a); // 异常 Unexpected value after '-a'. qDebug() << parser.isSet(op1); qDebug() << parser.value(op1); MainWindow w; w.show(); return a.exec(); }
int main(int argc, char *argv[]) { QApplication a(argc, argv); // -a="C:/A B/Demo.exe" QCommandLineOption op1("a"); op1.setValueName("path"); // 期望值是路径,设置了ValueName后,解析器会认为此命令带值 QCommandLineParser parser; parser.addOption(op1); parser.process(a); qDebug() << parser.value(op1);// "C:/A B/Demo.exe" MainWindow w; w.show(); return a.exec(); }
int main(int argc, char *argv[]) { QApplication a(argc, argv); // -a="C:/A B/Demo.exe" -a "Hello world" QCommandLineOption op1("a"); op1.setValueName("test"); Q CommandLineParser parser; parser.addOption(op1); parser.process(a); qDebug() << parser.values(op1);// ("C:/A B/Demo.exe", "Hello world") MainWindow w; w.show(); return a.exec(); }
// -a --BBB -c -D=Jack --Age -m=Hello -m "World" 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); // true qDebug() << parser.isSet("BBB"); // true qDebug() << parser.isSet("CCC"); // true qDebug() << parser.value(op4); // "Jack" qDebug() << parser.value(op5); // "18" qDebug() << parser.values(op6);// ("Hello", "World") qDebug() << parser.helpText(); MainWindow w; w.show(); return a.exec(); }
原文:http://blog.csdn.net/aqtata/article/details/30485963