使用Qt实现命令行解析

本文介绍使用Qt实现命令行解析。

在使用Qt开发软件时,有时候不需要设计界面(使用Qt库和signal,slot机制),程序在运行时需传递一些参数以完成系统配置,类似在Linux系统命令行下输入命令,就可以执行相应的功能。Qt提供了相应的类以支持命令行的解析。

1.涉及相关类

1)QCommandLineParser类

QCommandLineParser类的作用就是解析命令行参数,它实际上就是一个字符串类型的命令行解析器,此解析器仅在程序执行时进行命令解析,因此,命令行解析器的执行需要放置在main()函数的开头。如:

int main(int argc, char *argv[])
{QApplication a(argc, argv);QCommandLineParser parser;parser.process(a);
}

这里,给了一个空参数的命令行解析器以演示其基本功能。

2)QCommandLineOption类

在进行命令行解析前,我们需要将一些命令行选项添加到命令行解析器,这样命令行解析器才可以根据实际输入选项去置位相应的标识,程序判断某个选项被置位,就可以执行此选项对应的功能。选项功能需借助QCommandLineOption类来实现。如:

int main(int argc, char *argv[])
{QApplication a(argc, argv);QCommandLineParser parser;QCommandLineOption op1("p");op1.setValueName("path");parser.addOption(op1);QCommandLineOption op2("s");parser.addOption(op2);parser.process(a);if (parser.isSet(op1)) {qDebug() << parser.value(op1);} else if (parser.isSet(op2)) {qDebug() << "start streaming";} else {}
}

这里,我们给命令行解析器添加了2个选项,一个"p"选型,一个"s"选项,这样,我们在命令行下就可以实现相应的功能(这里的应用程序名称为"test")。

./test -p /home/test
./test -s

2.例子

int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;QCoreApplication::setApplicationName("test");QCoreApplication::setApplicationVersion("V1.0");QCommandLineParser parser;parser.setApplicationDescription("test helper");parser.addHelpOption();parser.addVersionOption();QCommandLineOption op1("s");parser.addOption(op1);QCommandLineOption op2("state");parser.addOption(op2);QCommandLineOption op3("p");op3.setValueName("path");parser.addOption(op3);parser.process(a);if (parser.isSet(op1)) {qDebug() << "start streaming";} else if (parser.isSet(op2)) {qDebug() << "current state:stop";} else if (parser.isSet(op3)) {qDebug() << "path:" << parser.value(op3);} else {}
}

这里,我们实现了3种常见的命令行选项:

1)单一字符选项,不附加任何参数

./test -s

2)字符串选项,不附加任何参数,这里注意是“--”

./test --state

3)单一字符选型,附加参数

./test -p /home/doc

应用程序根据此命令是否被设置(输入),来执行相应的功能。这里,仅打印相应的调试信息来表示此选项被设置。

总结,本文介绍了使用Qt实现命令行解析的方法,并实现了常用的命令行操作选项。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/145493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pdb restore in ADG database

Effect of PITR on Dataguard Environment (Standby MRP Crashed with ORA-39873) (Doc ID 1591492.1)​编辑To Bottom In this Document Symptoms Cause Solution APPLIES TO: Oracle Database Cloud Exadata Service - Version N/A and later Oracle Database Cloud Servic…

线程池异常捕获

1.多线程任务一般就只有两种excute和sumbit, 最大的区别就是execute没有返回值&#xff0c;submit有返回值。 异常捕获方法如下 TassThreadPoolExecutor THREAD_POOL_EXECUTOR new ThreadPoolExecutor(4,// 核心线程数量20,// 最大线程数30,// 空闲线程最大存活时间TimeUnit.…

ABAP 内表 删除重复的数据

在 ABAP 中&#xff0c;如果你想删除一个内部表中的重复行&#xff0c;你可以按照以下步骤进行操作&#xff1a; 第一步&#xff1a;定义一个辅助内部表&#xff0c;用于存储不重复的行&#xff1a; DATA: lt_unique TYPE TABLE OF your_table_type.第二步&#xff1a;使用 …

CentOS 7上生成HTTPS证书

在CentOS 7上生成HTTPS证书&#xff0c;可以使用OpenSSL工具。以下是在CentOS 7上生成自签名HTTPS证书的步骤&#xff1a; 安装OpenSSL&#xff1a; sudo yum install openssl生成证书和私钥&#xff1a; openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ssl.…

go语言学习之旅之Go语言数据类型

学无止境&#xff0c;今天学习Go 语言数据类型 Go&#xff08;或Golang&#xff09;是一种静态类型语言&#xff0c;这意味着变量的数据类型必须显式声明&#xff0c;并且在运行时不能更改。以下是Go中的一些基本数据类型&#xff1a; 这里仅介绍最常用的类型 数值类型: int: …

【漏洞复现】maccms苹果cms 命令执行漏洞

漏洞描述 感谢提供更多信息。“苹果CMS” 似乎是指 “Maccms”&#xff0c;这是一款开源的内容管理系统&#xff0c;主要用于搭建视频网站。Maccms 提供了一套完整的解决方案&#xff0c;包括用户管理、视频上传、分类管理、数据统计等功能&#xff0c;使用户能够方便地创建和…

基于django电影推荐系统

基于django电影推荐系统 摘要 该Django电影推荐系统是一个简单而基础的框架&#xff0c;旨在展示系统的基本组件。系统包括两个主要模型&#xff0c;即Movie和Rating&#xff0c;用于存储电影信息和用户评分。视图层包括展示电影列表和电影详情的功能&#xff0c;使用模板进行页…

构建自定义ChatGPT,微软推出Copilot Studio

11月16日&#xff0c;微软在美国西雅图举办“Microsoft Ignite 2023”全球开发者大会。本次人工智能成为重要主题&#xff0c;微软几乎把所有产品都集成了生成式AI功能并发布了一系列全新产品。 其中&#xff0c;微软重磅推出了Copilot Studio&#xff08;预览版&#xff09;&…

新的 Reptar CPU 缺陷影响英特尔台式机和服务器系统

英特尔修复了其现代台式机、服务器、移动和嵌入式 CPU 中的一个高严重性 CPU 漏洞&#xff0c;包括最新的 Alder Lake、Raptor Lake 和 Sapphire Rapids 微架构。 攻击者可以利用该缺陷&#xff08;追踪为CVE-2023-23583并被描述为“冗余前缀问题”&#xff09;来升级权限、获…

《视觉SLAM十四讲》-- 后端 1(下)

8.2 BA 与图优化 Bundle Adjustment 是指从视觉图像中提炼出最优的 3D 模型和相机参数&#xff08;内参和外参&#xff09;。 8.2.1 相机模型和 BA 代价函数 我们从一个世界坐标系中的点 p \boldsymbol{p} p 出发&#xff0c;把相机的内外参数和畸变都考虑进来&#xff0c;…

【极客时间-系列教程】深入剖析Kubernetes-预习篇 · 小鲸鱼大事记(二):崭露头角

文章目录 崭露头角机遇厮杀结论 崭露头角 机遇 机会就在能解决痛点&#xff0c;这不是PaaS平台存在的痛点&#xff0c;dotCloud缺能解决&#xff0c;选择开源了自家的一个容器项目 Docker&#xff0c;自此开启了"Docker"的全新时代 Docker的商标是"鲸鱼"…

opencv(1):创建和显示窗口, 读取保存图片

下载源码&#xff0c;方便查看 API 信息。 快速在源码文件夹中搜索相关 api. grep“namedWindow(*-Rn// 限定 .h 文件 grep“namedWindow(*-Rn|grep "\.h" vscode 语法检测有问题 一直有波浪线 打开 vscode, setting 界面&#xff0c;搜索 python 在 setting.json…

SystemVerilog学习 (10)——线程控制

一、概述 在实际硬件中,时序逻辑通过时钟沿来激活,组合逻辑的输出则随着输人的变化而变化。所有这些并发的活动在Verilog 的寄存器传输级上是通过initial和 always块语句、实例化和连续赋值语句来模拟的。为了模拟和检验这些语句块,测试平台使用许多并发执行的线程。在测试平台…

11988 - Broken Keyboard (a.k.a. Beiju Text) (UVA)

题目链接如下&#xff1a; Online Judge 这道题折磨了我不少时间&#xff0c;开始比较直观的想法超时&#xff0c;后来看了下别人的思路修改后才AC。 刘汝佳的代码很简洁&#xff0c;UVa 11988 悲剧文本&#xff08;四种方法&#xff09;_uva11988-CSDN博客 这里有。 还有下…

websocket实现实时数据推送,发布订阅重连单点登录功能

需求&#xff1a;使用websocket不借助插件实现发布&#xff0c;订阅&#xff0c;网络断开重连&#xff0c;单点登录后挤号的功能 1.单点登录&#xff08;同一账号同一时间只有一个在线&#xff0c;禁止多用户登录&#xff09; 实现&#xff1a;在用户登录之后获取到token令牌并…

软考 系统架构设计师系列知识点之云计算(3)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之云计算&#xff08;2&#xff09; 所属章节&#xff1a; 第11章. 未来信息综合技术 第6节. 云计算和大数据技术概述 4. 云计算的发展历程 根据云计算的定义和内涵&#xff0c;这里将从虚拟化技术、分布式技术和软件应…

k8s自定义Endpoint实现内部pod访问外部应用

自定义endpoint实现内部pod访问外部应用 endpoint除了可以暴露pod的IP和端口还可以代理到外部的ip和端口 使用场景 公司业务还还没有完成上云&#xff0c; 一部分云原生的&#xff0c;一部分是实体的 业务上云期间逐步实现上云&#xff0c;保证各个模块之间的解耦性 比如使…

C/C++轻量级并发TCP服务器框架Zinx-框架开发003:转大写字母输出+责任链模式+代码重构思路及实现

文章目录 1 添加转大写字母输出功能2 责任链模式2.1 责任链的设计2.2 责任链的实现2.3 责任链的测试 3 代码重构3.1 类图设计3.2 重构设计 - 头文件3.3 重构实现 1 添加转大写字母输出功能 功能流程&#xff1a; stdin通道类中包含一个功能处理类对象功能处理类中包含一个stdo…

endnote20如何导入已经下载好的ris和pdf文件

查看此链接 1 文献导入 1.1 PDF导入 &#xff08;1&#xff09;方法一 打开&#xff1a;菜单栏–>Import–>FIle或folder 单个导入PDF或导入一个文件夹的PDF或通过拖曳多个PDF进入空白处完成导入 1.3 导入已经整理好的文献资料 已有的ris文件 打开&#xff1a;菜单栏–…