有没有一种方法可以将 QCommandLineParser 与一个选项后跟多个值一起使用?

Is there a way to use QCommandLineParser with an option followed by multiple values?

我需要让我的应用程序扫描作为命令行参数给出的多个端口,到目前为止我有这个:

    QCommandLineOption portScanOption(QStringList() << "p" << "target-port",
                QCoreApplication::translate("main", "Scan <port> for other instances"),
                QCoreApplication::translate("main", "port"));
    parser.addOption(portScanOption);
    parser.process(app);
    auto ports = parser.values(portScanOption); // do something with the ports

为了使其正常工作,我需要像这样传递参数:-p 5000 -p 7000 -p 8000。 我正在寻找一种方法来使这项工作适用于以下输入:-p 5000 7000 8000,但我找不到任何东西,甚至在官方文档中也找不到。这是非常微不足道的事情,所以我希望 Qt 有这样的东西。你们知道应该怎么做吗?

这已经处理 - 您提出的语法不太适合 QCommandLineParser。使用 -p 5000,7000,8000-p "5000 7000 8000"。所有这些端口都将是端口选项的值,然后您可以用 split(QRegularExpression("[, ]"), Qt::SkipEmptyParts)(即 QString::split)将它们分隔开。例如:

auto ports = parser.value("target-port")
             .split(QRegularExpression("[, ]"), Qt::SkipEmptyParts);
for (auto &portStr : ports) {
  bool ok = false;
  int port = portStr.toInt(&ok);
  if (!ok) continue;
  // use port value here
}

或者,由于 Qt 源代码可用,您可以将命令行解析器源代码复制到您的项目中,重命名 class,并扩展它以支持您想要的原始语法。