赞
踩
命令行参数就是写在命令之后的一些补充选项。命令和参数之间有空格隔开。格式一般是这样:
command parameters
执行程序时,可以从命令行传值给程序,它们对程序很重要,特别是当您想从外部控制程序时。
命令行参数是使用 main() 函数参数来处理的,其中,argc 是指传入参数的个数,argv[] 是一个指针数组,指向传递给程序的每个参数。下面是一个简单的实例,检查命令行是否有提供参数,并根据参数执行相应的动作:
// Qt 程序代码
#include <QtCore>
#define qout qDebug()
int main(int argc, char *argv[]) {
for (int i = 0; i < argc; ++i) {
qout << i << argv[i];
}
return 0;
}
执行: |
---|
使用cmd执行命令 : CommandLineParserDemo.exe hello world |
结果如下: |
![]() |
带短横线的参数就叫做选项,具体可分为两种:
短名称选项形式就是一个短横线后接一个字母。格式例如:
command -a
如果我们要一次加好几个短参数,可以用空格隔开,例如:
command -a -b -c
多个短参数也可以合并在一起,例如上面的命令等价于:
command –abc
长名称选项是以两个短横线–开始的。格式例如:
command --parameter
如果有多个长参数-- 只能以空格隔开写,格式例如:
command --parameter1 --parameter2
有一些选项我们还可以给它赋一个值,
看起来长参数的方式更加容易理解,但是不如短参数那么简洁。
参考:
QT解析命令行(QCommandLineOption和QCommandLineParser类) - findumars - 博客园 (cnblogs.com)
QCoreApplication提供命令行参数作为简单的字符串列表。
// Qt 程序代码
#include <QtCore>
#define qout qDebug()
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
qout << a.arguments();
}
执行 |
---|
使用cmd执行命令 : CommandLineParserDemo.exe hello world |
结果如下:![]() |
QCommandLineParser提供了定义选项,解析命令行参数、存储选项以及选项值的能力。
任何不是选项的参数(即不是以 - 开头)都存储为“位置参数”。解析器可以处理短名称选项,长名称选项,相同选项的多个名称以及选项值。
命令行解析器会按照预先定义的选项去解析。
QcommandLineOption 类用来定义选项,QcommandLineParser 再添加选项,程序运行的时候再进行解析,比如:
#include <QtCore>
#define qout qDebug()
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QCommandLineOption op1("a");
QCommandLineParser parser;
parser.addOption(op1);
parser.process(a);
qDebug() << parser.isSet(op1); // true
}
CommandLineParserDemo.exe -a
//如果使用了其它未配置的选项,则会报错,比如:
CommandLineParserDemo.exe -ab
QCommandLineOption设置了ValueName后,解析器就会认为此命令带值,将会认为后的word就是值。
但如果选项定义了值,命令行却没有为选项赋值,则会报错。
QCommandLineOption op1("a");
op1.setValueName("value");
qDebug() << parser.value(op1); // “10”
CommandLineParserDemo.exe -a10
CommandLineParserDemo.exe -a 10 CommandLineParserDemo.exe -a=10
//短选项可以使用这3种赋值形式
另外选项值可以有多个:
QCommandLineOption op1("a");
op1.setValueName("value");
qDebug() << parser.values(op1);
CommandLineParserDemo.exe -a10 -a 20 -a=30 输出: ("10", "20", "30")
#include <QtCore>
#define qout qDebug()
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QCommandLineOption op1("aa","","");
op1.setValueName("value");
QCommandLineParser parser;
parser.addOption(op1);
parser.process(a);
qDebug() << parser.values(op1);
}
// 对于长名称,传选项和值的时候,使用两个短横线就行,赋值有2种方式
CommandLineParserDemo.exe --aa 10 --aa=20
关于–help 和 --version选项,Qt已经预先定义好了,可以直接使用方法即可。
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QCommandLineParser parser;
parser.addHelpOption();
parser.addVersionOption();
parser.process(a);
}
执行: |
---|
CommandLineParserDemo.exe -h |
![]() |
CommandLineParserDemo.exe -v ![]() |
但是打印出来的程序信息不够完善,需要另外设置程序的描述和版本。
#include <QtCore>
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QCoreApplication::setApplicationName("这是应用程序名称");
QCoreApplication::setApplicationVersion("1.0\nQt5.14.2 msvc2017_x86");
QCommandLineParser parser;
parser.setApplicationDescription("这是应用程序的描述");
parser.addHelpOption();
parser.addVersionOption();
QCommandLineOption opt("a","这是有值选项的描述","value");
parser.addOption(opt);
QCommandLineOption opt2("b","这是无值选项的描述");
parser.addOption(opt2);
parser.process(a);
}
运行结果: |
---|
![]() |
"positional argument"即Qt所谓的位置参数,解析器如果没有找到参数对应的选项,就把这些参数放到字符串列表中。
#include <QtCore>
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QCommandLineParser parser;
QCommandLineOption opt("a");
opt.setValueName("value");
parser.addOption(opt);
parser.process(a);
qDebug() << parser.values(opt); // ("100")
qDebug() << parser.positionalArguments(); // ("10", "20")
}
CommandLineParserDemo.exe -a100 10 20
("100")
("10", "20")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。