在开发过程中,由于需要,有时候要对程序中的命令行进行使用,比如最近的开发任务需要用外部exe启动我们的软件,启动的时候传入一些必要的命令行参数,使我们软件启动的时候根据这些参数进行一些必要的操作,这个时候就可以使用Qt自带的QCommandLineParser这个类。
Qt中是用QCommandLineOption和QCommandLineParser这两个类配合进行应用的解析。下面就直接贴出一个例子的简单使用,方便大家理解,其中涉及到一些东西也很多,长,短命令,以及多参,从最基础的用法入手,后面自己学习扩展即可。
封装了一个用例类(举例了一个软件自启动的例子):
头文件:
/*
软件命令行解析
1.自启动 -r=auto
2.某路径 -o=path
3.某路径 -b=path
4.xxxxx -x=xxxx
5....... .......
*/
#pragma once
#include <QObject>
class CommandLineParser{
public:
//@brief:是否有软件自启动命令行
static bool IsSetAutoRun();
//@brief:获取软件自启动命令行数值
static QString GetAutoRunValue();
private:
BFCommandLineParser();
~BFCommandLineParser();
BFCommandLineParser(BFCommandLineParser&)=delete;
BFCommandLineParser&operator=(BFCommandLineParser&)= delete;
};
实现文件:
#include "BFCommandLineParser.h"
#include <QCommandLineParser>
#include <QApplication>
#include <QDebug>
CommandLineParser::CommandLineParser()
{
//构造
}
CommandLineParser::~CommandLineParser()
{
//析构
}
bool BFCommandLineParser::IsSetAutoRun() {
//解析对象
QCommandLineParser command_parser;
//解析选项对象
QCommandLineOption option("a");
//参数期望的数值,如果不设置,使用process解析会异常退出
option.setValueName("auto");
//添加解析选项
command_parser.addOption(option);
//开始解析
command_parser.parse(qApp->arguments());
qDebug() << command_parser.isSet(option);
//应用程序的命令行是否含有该解析选项
return command_parser.isSet(option);
}
QString BFCommandLineParser::GetAutoRunValue() {
QCommandLineParser command_parser;
QCommandLineOption option("a");
option.setValueName("auto");
command_parser.addOption(option);
command_parser.parse(qApp->arguments());
QString str;
if (command_parser.isSet(option)) {
//获取应用程序的命令行中含有该解析选项的数值
str = command_parser.value(option);
}
return str;
}
自己遇到的问题和注意点:
1.QCommandLineOption::parser和QCommandLineOption::process效果类似,后者要是程序的命令行没有选项程序会一场退出。
2.如果是有参数的选项,要设置期望名字QCommandLineOption::setValueName 然后在解析
3.顺序不要错误,设置完选项之后再调用QCommandLineOption::parser或者QCommandLineOption::process解析。
4.获取数值的时候如果调用的是values而不是value发现就不准确,其他选项任何包含该关键词的字符串都会被输出出来。
|