当前位置: 首页 > 网络知识

Qt 解析命令行(QCommandLineOption和QCommandLineParser类)

时间:2026-01-27 08:40:17

Qt从5.2版开始提供了两个类QCmandLineOption和QCmandLineParser来解析应用的命令行参数。

一、命令行写法
命令行:"abc"

在QCmandLineParser的解析模式为ParseAsCpactedShortOptions(默认)时会被认为是3个参数,即"a"、"b"和"c"

1 QCmandLineOption op1("a"); 2 QCmandLineOption op2("b"); 3 QCmandLineOption op3("c"); 4 5 QCmandLineParser parser; 6 parser.addOption(op1); 7 parser.addOption(op2); 8 parser.addOption(op3); 9 parser.process(a); 10 11 qDebug() << parser.isSet(op1); // true 12 qDebug() << parser.isSet(op2); // true 13 qDebug() << parser.isSet(op3); // true

反之,当解析模式为ParseAsLongOptions时,"abc"会被认为是1个长命令,即"abc"

但是由于长命令应该是以""开头,所以下面的代码会出现异常,提示"未知的选项"

1 QCmandLineOption op1("a"); 2 QCmandLineOption op2("b"); 3 QCmandLineOption op3("c"); 4 5 QCmandLineParser parser; 6 parser.setSingleDashWordOptionMode(QCmandLineParser::ParseAsLongOptions); 7 parser.addOption(op1); 8 parser.addOption(op2); 9 parser.addOption(op3); 10 parser.process(a); // 抛出异常,程序退出:Unknown option 'abc'.

Qt推荐使用ParseAsCpactedShortOptions模式,这也是默认的解析模式。而ParseAsLongOptions模式则是为了兼容而存在。

二、带值的命令

命令行参数通常就分为两种,带值的和不带值的。不带值的就直接注册一个命令就行了,比如上面的

QCmandLineOption op1("a");

我们可以把这个"a"理解为一个bool类型的命令。如果需要带值,则把值写在命令后面即可,值和命令之间用等号或空格隔开,字符串可以用双引号括起来

a ABC
a=ABC
继续看一段代码,假设命令行为"a="C:/A B/Demo.exe""

1 int main(int argc, char *argv[]) 2

由于我们定义的op1并没有说明其会有参数,而实际的命令行后面跟了个参数,解析器就会报错。Qt文档中也表示,解析器不支持可选参数。
如果需要附带参数,则必须指定一个期望值

1 int main(int argc, char *argv[]) 2

设置了ValueName后,解析器就会认为此命令带值,将会认为下一个等号或空格后的值就是参数
这个ValueName名字随便取,只是起到一个指导性的作用。你甚至可以将它设置为"abc"
另外,值可以有多个

1 int main(int argc, char *argv[]) 2

还有QCmandLineParser的addHelpOption()、addVersionOption()都是添加显示命令版本和帮助用的,一般只有命令行程序才会用到吧,就不细说了。
解析可以用parse()方法或process()方法,前者遇到不可解析的命令会返回false但不会抛出异常,后者则会抛出异常。
最后,看一个比较完整的示例

1 // a BBB c D=Jack Age m=Hello m "World" 2 int main(int argc, char *argv[]) 3



上一篇:Beckhoff TwinCAT3中松下伺服A6BF的全闭环设置步骤
下一篇:VTK9.1.0在Windows10+VS2019+Qt 5.15.2环境下编译安装以及VTK应用于QT
Qt
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素