本文介绍使用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实现命令行解析的方法,并实现了常用的命令行操作选项。