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

你可能感兴趣的:(Qt编程,qt)