QCommandLineParser类提供了一种处理命令行选项的方法。
QCoreApplication以简单字符串列表的形式提供命令行参数。 QCommandLineParser提供了定义一组选项、解析命令行参数和存储实际使用的选项以及选项值的能力。
任何非选项的参数(即不以-开头)都被存储为“位置参数”。
命令行上的选项被识别为以单个或双字符开头。 选项-(单破折号单独)是一种特殊情况,通常意味着标准输入,不被视为一个选项。 解析器将把选项--(双破折号)之后的所有内容视为位置参数。
短选项是单个字母。 选项v将通过在命令行上传递-v来指定。 在默认的解析模式下,短选项可以写成紧凑的形式,例如-abc相当于-a -b -c。解析模式可以设置为ParseAsLongOptions,在这种情况下-abc将被解析为长选项abc。
长选项的长度超过一个字母,不能压缩在一起。长选项 verbose 将作为 --verbose 或 -verbose 传递。
可以使用赋值运算符 -v=value --verbose=value 或空格:-v value --verbose value 来完成将值传递给选项,即下一个参数用作值(即使它以 -开头)。
解析器不支持可选值 - 如果某个选项设置为需要某个值,则必须存在一个值。如果此类选项放在最后且没有值,则该选项将被视为未指定。
解析器不会通过使用格式--disable-option或--no-option自动支持否定或禁用长选项。 但是,通过将no-option作为一个选项并显式地处理该选项,可以显式地处理这种情况。
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
QCoreApplication::setApplicationName("my-copy-program"); //应用名称
QCoreApplication::setApplicationVersion("1.0"); //版本号
QCommandLineParser parser;
parser.setApplicationDescription("Test helper"); //设置应用程序描述信息
parser.addHelpOption(); //添加帮助选项(“-h”或者“--help”)
parser.addVersionOption(); //添加版本选项(“-v”或者“--version”)
parser.addPositionalArgument("source",QCoreApplication::translate("main", "Source file to copy."));
parser.addPositionalArgument("destination",QCoreApplication::translate("main", "Destination directory."));
// 具有单个名称的boolean选项(-p)
QCommandLineOption showProgressOption("p", QCoreApplication::translate("main", "Show progress during copy"));
parser.addOption(showProgressOption);
// 具有多个名称的boolean选项(-f, --force)
QCommandLineOption forceOption(QStringList() << "f" << "force",
QCoreApplication::translate("main", "Overwrite existing files."));
parser.addOption(forceOption);
// 具有值的选项
QCommandLineOption targetDirectoryOption(QStringList() << "t" << "target-directory",
QCoreApplication::translate("main", "Copy all source files into <directory>."),
QCoreApplication::translate("main", "directory"));
parser.addOption(targetDirectoryOption);
// 处理用户给出的实际命令行参数
parser.process(app);
const QStringList args = parser.positionalArguments();
// source is args.at(0), destination is args.at(1)
bool showProgress = parser.isSet(showProgressOption);
bool force = parser.isSet(forceOption);
QString targetDir = parser.value(targetDirectoryOption);
}