Qt:QCommandLineParser类

1060 篇文章 302 订阅

QCommandLineParser类提供了一种处理命令行选项的方法

头文件:

#include <QCommandLineParser>

cmake:

find_package(Qt6 COMPONENTS Core REQUIRED)
target_link_libraries(mytarget PRIVATE Qt6::Core)

qmake:

QT += core

引入:

Qt 5.2

详细说明

QCoreApplication以简单的字符串列表的形式提供命令行参数。QCommandLineParser提供了定义一组选项、解析命令行参数、存储实际使用的选项以及选项值的能力。

任何不是选项的参数(即不以a -开头)都被存储为“位置参数”。

解析器处理短名称,长名称,相同选项的多个名称以及选项值。

命令行上的选项被识别为以一个或两个-字符开头。选项-(仅单破折号)是一种特殊情况,通常表示标准输入,而不是选项。解析器会将选项–(双破折号)之后的所有内容都视为位置参数。

短选项是单个字母。该选项v将通过-v在命令行上传递来指定。在默认的解析模式下,短选项可以紧凑的形式编写,例如-abc等效于-a -b -c。可以将的解析模式设置为ParseAsLongOptions,在这种情况下,-abc将解析为long选项abc。

长选项超过一个字母长,不能一起压缩。long选项verbose将作为–verbose或传递-verbose。

可以使用赋值运算符:-v=value --verbose=value或空格:将值传递给选项-v value --verbose value,即,将下一个参数用作值(即使它以开头-)。

解析器不支持可选值-如果将选项设置为需要一个值,则必须存在一个。如果这样的选项放在最后并且没有任何值,则该选项将被视为未指定。

解析器不自动支持使用–disable-option或格式否定或禁用长选项–no-option。但是,可以通过使用no-option其名称之一作为选项并显式处理该选项来显式处理这种情况。

例子:

成员函数

QCommandLineParser

QCommandLineParser::QCommandLineParser()

构造一个命令行解析器对象。

~QCommandLineParser

QCommandLineParser::~QCommandLineParser()

销毁命令行解析器对象。

addHelpOption

QCommandLineOption QCommandLineParser::addHelpOption()

添加帮助选项(-h,–help和-?)在Windows上)以及一个选项——help-all,以在输出中包含qt特定的选项。

这些选项由QCommandLineParser自动处理。

记住使用setApplicationDescription来设置应用程序描述,使用此选项时将显示该描述。

返回可用于调用isSet()的选项实例。

addOption

bool QCommandLineParser::addOption(const QCommandLineOption &option)

添加在解析时查找的选项选项。

如果添加选项成功,则返回true;否则返回false。

如果该选项没有附加名称,或者该选项的名称与前面添加的选项名称冲突,则添加该选项失败。

addOptions

[since 5.4]bool QCommandLineParser::addOptions(const QList<QCommandLineOption>&options)

添加解析时查找的选项。这些选项由参数选项指定。

如果添加所有选项都成功,则返回true;否则返回false。

当这个函数可能失败时,请参阅文档addOption()。

这个函数是在Qt 5.4中引入的。

addPositionalArgument

void QCommandLineParser::addPositionalArgument(const QString &name, const QString &description, const QString &syntax = QString())

为应用程序定义一个额外的参数,以便使用帮助文本。

参数名称和描述将出现在帮助的参数:部分。如果指定了语法,它将被追加到Usage行,否则名称将被追加。

例子:

// Usage: image-editor file
//
// Arguments:
//   file                  The file to open.
parser.addPositionalArgument("file", QCoreApplication::translate("main", "The file to open."));

// Usage: web-browser [urls...]
//
// Arguments:
//   urls                URLs to open, optionally.
parser.addPositionalArgument("urls", QCoreApplication::translate("main", "URLs to open, optionally."), "[urls...]");

// Usage: cp source destination
//
// Arguments:
//   source                Source file to copy.
//   destination           Destination directory.
parser.addPositionalArgument("source", QCoreApplication::translate("main", "Source file to copy."));
parser.addPositionalArgument("destination", QCoreApplication::translate("main", "Destination directory."));

另请参见:addHelpOption() 、helpText().

#include <QCoreApplication>
#include <QSettings>
#include <QDebug>
#include <QDir>
#include <QCommandLineParser>

int main(int argc, char *argv[])
{
    QCoreApplication a(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."));


	parser.process(a);
	
    return a.exec();
}

在这里插入图片描述

addVersionOption

QCommandLineOption QCommandLineParser::addVersionOption()

添加-v /–version选项,用于显示应用程序的版本字符串。

该选项由QCommandLineParser自动处理。

您可以使用QCoreApplication::setApplicationVersion()来设置实际的版本字符串。

返回可用于调用isSet()的选项实例。

#include <QCoreApplication>
#include <QSettings>
#include <QDebug>
#include <QDir>
#include <QCommandLineParser>

int main(int argc, char *argv[])
{
    QCoreApplication a(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.process(a);
	
    return a.exec();
}

在这里插入图片描述

applicationDescription

QString QCommandLineParser::applicationDescription() const

返回setApplicationDescription()中设置的应用程序描述。

参见setApplicationDescription()。

在这里插入图片描述

clearPositionalArguments

void QCommandLineParser::clearPositionalArguments()

从帮助文本中清除其他自变量的定义。

仅对于支持具有不同选项的命令的特殊情况的工具才需要这样做。一旦确定了实际命令,就可以定义该命令的选项,并且可以相应的调整该命令的帮助文本

例子:

QCoreApplication app(argc, argv);
QCommandLineParser parser;

parser.addPositionalArgument("command", "The command to execute.");

// Call parse() to find out the positional arguments.
parser.parse(QCoreApplication::arguments());

const QStringList args = parser.positionalArguments();
const QString command = args.isEmpty() ? QString() : args.first();
if (command == "resize") {
    parser.clearPositionalArguments();
    parser.addPositionalArgument("resize", "Resize the object to a new size.", "resize [resize_options]");
    parser.addOption(QCommandLineOption("size", "New size.", "new_size"));
    parser.process(app);
    // ...
}

/*
This code results in context-dependent help:

$ tool --help
Usage: tool command

Arguments:
  command  The command to execute.

$ tool resize --help
Usage: tool resize [resize_options]

Options:
  --size <size>  New size.

Arguments:
  resize         Resize the object to a new size.
*/

errorText

QString QCommandLineParser::errorText() const

为用户返回经过翻译的错误文本。只有当parse()返回false时才会调用这个函数。

helpText

QString QCommandLineParser::helpText() const

返回包含完整帮助信息的字符串。

参见showHelp()。

isSet

bool QCommandLineParser::isSet(const QCommandLineOption &option) const

检查是否将选项名称传递给应用程序。

如果设置了选项名,则返回true,否则返回false。

所提供的名称可以是使用addOption()添加的任何选项的任意长或短名称。所有的选项名称都被视为等价的。如果无法识别该名称或该选项不存在,则返回false。

例子:

bool verbose = parser.isSet("verbose");

bool QCommandLineParser::isSet(const QCommandLineOption &option) const

这是一个重载函数。

检查是否将选项传递给应用程序。

如果设置了该选项则返回true,否则返回false。

这是检查没有值的选项的推荐方法。

QCoreApplication app(argc, argv);
QCommandLineParser parser;
QCommandLineOption verboseOption("verbose");
parser.addOption(verboseOption);
parser.process(app);
bool verbose = parser.isSet(verboseOption);

optionNames

QStringList QCommandLineParser::optionNames() const

返回找到的选项名的列表。

这将返回解析器找到的所有可识别选项名称的列表,这些名称按照找到它们的顺序排列。对于任何形式为{–option=value}的长选项,value部分将被删除。

此列表中的名称不包括前面的破折号字符。如果解析器多次遇到名称,则名称可能在此列表中出现多次。

列表中的任何条目都可以与value()或values()一起使用,以获得任何相关的选项值。

parse

bool QCommandLineParser::parse(const QStringList &arguments)

解析命令行参数。

大多数程序不需要调用这个函数,简单地调用process()就足够了。

parse()更低级,只执行解析。应用程序必须处理错误处理,如果parse()返回false,则使用errorText()。这对于在图形程序中显示图形错误信息是很有用的。

为了暂时忽略未知选项,调用parse()而不是process()也很有用,因为稍后将在调用process()之前提供更多的选项定义(取决于其中一个参数)。

不要忘记参数必须以可执行文件的名称开头(不过会被忽略)。

在解析错误的情况下返回false(未知选项或缺失值);否则返回true。

参见process()。

positionalArguments

QStringList QCommandLineParser::positionalArguments() const

返回位置参数列表。

这些都是没有被认为是选项的一部分的所有参数。

process

void QCommandLineParser::process(const QStringList &arguments)

处理命令行参数。

除了解析选项(如parse())之外,这个函数还处理内置选项和处理错误。

内置选项是–version(如果addVersionOption被调用)和–help /–help-all(如果addHelpOption被调用)。

当调用这些选项中的一个时,或者发生错误时(例如传递了未知选项),当前进程将使用exit()函数停止。

参见QCoreApplication::arguments()和parse()。

void QCommandLineParser::process(const QCoreApplication &app)

这是一个重载函数。

命令行是从QCoreApplication实例应用程序获取的。

setApplicationDescription

void QCommandLineParser::setApplicationDescription(const QString &description)

设置由helpText()显示的应用程序描述。

参见applicationDescription()。

在这里插入图片描述

setOptionsAfterPositionalArgumentsMode

[since 5.6]void QCommandLineParser::setOptionsAfterPositionalArgumentsMode(QCommandLineParser::OptionsAfterPositionalArgumentsMode parsingMode)

设置解析模式为parsingMode。这个必须在process()或parse()之前调用。

这个函数是在Qt 5.6中引入的。

setSingleDashWordOptionMode

void QCommandLineParser::setSingleDashWordOptionMode(QCommandLineParser::SingleDashWordOptionMode singleDashWordOptionMode)

设置解析模式为singleDashWordOptionMode。这个必须在process()或parse()之前调用。

showHelp

void QCommandLineParser::showHelp(int exitCode = 0)

显示帮助信息,并退出应用程序。这是由–help选项自动触发的,但也可以用于在用户没有正确调用应用程序时显示帮助。退出码设置为exitCode。如果用户请求查看帮助,则应将其设置为0,如果出现错误,则将其设置为任何其他值。

参见helpText()。

showVersion

[since 5.4]void QCommandLineParser::showVersion()

显示来自QCoreApplication::applicationVersion()的版本信息,并退出应用程序。这是由–version选项自动触发的,但在不使用process()时也可以用来显示版本。退出码设置为EXIT_SUCCESS(0)。

这个函数是在Qt 5.4中引入的。

参见addVersionOption()。

unknownOptionNames

QStringList QCommandLineParser::unknownOptionNames() const

返回未知选项名的列表。

此列表将包括未被识别的长名称和短名称选项。对于任何形式为{–option=value}的长选项,value部分将被删除,只添加长名称。

此列表中的名称不包括前面的破折号字符。如果解析器多次遇到名称,则名称可能在此列表中出现多次。

参见optionNames()。

value

QString QCommandLineParser::value(const QString &optionName) const

返回为给定选项名找到的选项值optionName,如果没有找到,则返回一个空字符串。

所提供的名称可以是使用addOption()添加的任何选项的任意长或短名称。所有的选项名都被视为等价的。如果无法识别名称或该选项不存在,则返回空字符串。

对于解析器找到的选项,将返回为该选项找到的最后一个值。如果在命令行上没有指定该选项,则返回默认值。

如果该选项不带值,则返回空字符串。

参见values(), QCommandLineOption::setDefaultValue()和QCommandLineOption::setDefaultValues()。

QString QCommandLineParser::value(const QCommandLineOption &option) const

这是一个重载函数。

返回为给定选项找到的选项值,如果没有找到则返回空字符串。

对于解析器找到的选项,将返回为该选项找到的最后一个值。如果在命令行上没有指定该选项,则返回默认值。

如果该选项不带值,则返回空字符串。

参见values(), QCommandLineOption::setDefaultValue()和QCommandLineOption::setDefaultValues()。

values

QStringList QCommandLineParser::values(const QString &optionName) const

返回为给定选项名optionName找到的选项值列表,如果没有找到,则返回一个空列表。

所提供的名称可以是使用addOption()添加的任何选项的任意长或短名称。所有的选项名称都被视为等价的。如果无法识别该名称或该选项不存在,则返回一个空列表。

对于解析器找到的选项,该列表将包含解析器每次遇到该选项时的一个条目。如果在命令行上没有指定该选项,则返回默认值。

如果该选项不接受值,则返回空列表。

参见value(), QCommandLineOption::setDefaultValue()和QCommandLineOption::setDefaultValues()。

QStringList QCommandLineParser::values(const QCommandLineOption &option) const

这是一个重载函数。

返回为给定选项找到的选项值列表,如果没有找到,则返回空列表。

对于解析器找到的选项,该列表将包含解析器每次遇到该选项时的一个条目。如果在命令行上没有指定该选项,则返回默认值。

如果该选项不接受值,则返回空列表。

参见value(), QCommandLineOption::setDefaultValue()和QCommandLineOption::setDefaultValues()。

例子

我们可以在qtcreator下加入执行参数
在这里插入图片描述
当然我们也可以在windos下的dos命令行下执行,前提是把程序需要用到的qt库拷贝到执行目录:
在这里插入图片描述

`setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint)` 是一个 Qt 函数调用,用于将窗口设置为工具提示窗口,并且始终保持在顶部,并且窗口没有边框。这个函数可以在创建窗口时调用,也可以在运行时调用。 下面是一个使用 `setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint)` 的例子。在这个例子中,我们创建了一个简单的窗口,并将其设置为工具提示窗口、始终在顶部,并且没有边框: ```cpp #include <QtWidgets> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget window; window.setGeometry(100, 100, 200, 200); window.setWindowTitle("Tool Window"); window.show(); // Set the window to be a tool window, always on top, and frameless window.setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint); return app.exec(); } ``` 在上面的例子中,我们创建了一个名为 `window` 的 `QWidget` 对象,并通过 `setGeometry` 函数设置了窗口的位置和大小。随后,我们将窗口的标题设置为 `"Tool Window"`,并将其显示出来。最后,我们调用 `setWindowFlags` 函数,并将其参数设置为 `Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint`,以将窗口设置为工具提示窗口、始终在顶部,并且没有边框。 需要注意的是,如果您想取消窗口的 `Tool`、`WindowStaysOnTopHint`、`FramelessWindowHint` 标志位,可以使用 `clearMask(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint)` 函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值