如何在Qt中定义带可选值的QCommandLineOption
如何在Qt中创建带可选值的QCommandLineOption?
你碰到的这个"missing value after --png"错误,核心原因是:默认情况下QCommandLineOption会认为选项后面必须跟一个值,哪怕你设置了默认值也没用——它根本不会自动用默认值补位,除非你明确告诉它这个值是可选的。
解决方法很简单,只需要在创建QCommandLineOption的时候,给它加上QCommandLineOption::OptionOptionalValue这个标记就行,有两种写法:
方法一:构造时直接指定标记
直接用带flags参数的构造函数,把最后一个参数设为可选值标记:
QCommandLineOption pngOption( QStringList() << "png", // 选项名(支持添加短选项,比如"p") "使用PNG格式输出,可指定通配符(默认值为*)", // 选项描述 "wildcard", // 值的占位符(帮助信息里会显示--png <wildcard>) "*", // 默认值 QCommandLineOption::OptionOptionalValue // 关键:标记值为可选 );
方法二:先创建选项再设置标记
如果习惯分步写,也可以先创建选项,再调用setFlags()添加标记:
QCommandLineOption pngOption( "png", "使用PNG格式输出,可指定通配符(默认值为*)", "wildcard", "*" ); pngOption.setFlags(QCommandLineOption::OptionOptionalValue);
验证效果
把这个选项添加到解析器后,两种使用场景都会正常工作:
- 当用户只输入
--png,解析后通过parser.value(pngOption)会拿到默认值* - 当用户输入
--png=myfile或者--png myfile,会拿到指定的myfile
举个完整的小例子:
#include <QCoreApplication> #include <QCommandLineParser> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QCommandLineOption pngOption( QStringList() << "png", "使用PNG格式输出,可指定通配符(默认值为*)", "wildcard", "*", QCommandLineOption::OptionOptionalValue ); QCommandLineParser parser; parser.addOption(pngOption); parser.process(app); QString wildcard = parser.value(pngOption); qDebug() << "当前使用的通配符:" << wildcard; return app.exec(); }
这样运行的时候,不管是带值还是不带值,都不会再报那个错误啦。
内容的提问来源于stack exchange,提问作者Miro Samek
相关产品推荐
相关产品推荐

