網站首頁 編程語言 正文
在開發過程中,由于需要,有時候要對程序中的命令行進行使用,比如最近的開發任務需要用外部exe啟動我們的軟件,啟動的時候傳入一些必要的命令行參數,使我們軟件啟動的時候根據這些參數進行一些必要的操作,這個時候就可以使用Qt自帶的QCommandLineParser這個類。
Qt中是用QCommandLineOption和QCommandLineParser這兩個類配合進行應用的解析。下面就直接貼出一個例子的簡單使用,方便大家理解,其中涉及到一些東西也很多,長,短命令,以及多參,從最基礎的用法入手,后面自己學習擴展即可。
封裝了一個用例類(舉例了一個軟件自啟動的例子):
頭文件:
/*
軟件命令行解析
1.自啟動 -r=auto
2.某路徑 -o=path
3.某路徑 -b=path
4.xxxxx -x=xxxx
5....... .......
*/
#pragma once
#include
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
#include
#include
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發現就不準確,其他選項任何包含該關鍵詞的字符串都會被輸出出來。
原文鏈接:https://blog.csdn.net/qq_36533978/article/details/124689694
相關推薦
- 2022-04-26 ASP.NET?Core?MVC中Required與BindRequired用法與區別介紹_基礎應用
- 2023-07-02 oracle實現根據字段分組排序,取其第一條數據_oracle
- 2022-06-08 CentOs7下docker簡單實踐,安裝nginx
- 2022-05-05 Python學習之字符串常用方法總結_python
- 2022-09-05 用兩個隊列模擬一個棧
- 2022-12-06 Python實現批量修改xml文件的腳本_python
- 2023-03-15 React受控組件與非受控組件實例分析講解_React
- 2022-04-01 FastDFS服務不能上傳文件 報錯:fileutil.MyException: getStoreS
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支