有没有一种方法可以将 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,并扩展它以支持您想要的原始语法。
我需要让我的应用程序扫描作为命令行参数给出的多个端口,到目前为止我有这个:
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,并扩展它以支持您想要的原始语法。