检索Qt应用程序中的命令行参数

时间:2013-08-16 19:27:35

标签: c++ qt

我想在Unix命令提示符下执行某些操作:

./countHats("red")   or 
./countHats "red"

然后程序运行并计算红帽子。

我该怎么做?

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    w.setGeometry(QRect(QPoint(100,100), QSize(1000,500)));

    CHat *hat = new CHat();
    hat->color(argv[0]);//"red"   ????

    return a.exec();
}

3 个答案:

答案 0 :(得分:12)

您最好使用QCoreApplication::arguments

基本上,您需要像这样使用它:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    w.setGeometry(QRect(QPoint(100,100), QSize(1000,500)));

    CHat *hat = new CHat();
    hat->color(QCoreApplication::arguments().at(1));

    return a.exec();
}

然后调用以下命令:./countHats red。在这种特殊情况下不需要引号,也不需要括号,尽管它也适用于引号。

如果你有一个包含空格的参数,你需要引号,等等,非常简单的颜色不是这种情况,而对于更多,你需要颜色代码管理,无论如何。


PS,为什么我们这样做,你应该为你的setter使用更好的名字,如setColorcolor()通常用于获取颜色的值,而不是设置颜色,但现在稍微偏离主题。我也希望帮助你指出这一点。

此外,您似乎没有删除帽子,并且它不会参与Qt父/子关系以自动删除。你也需要改进这一点。

但请注意,我和David Faure一直致力于QCommandLineParser课程,你可以在Qt5.2上使用它。目前正在审查有关整合的gerrit的变化。

答案 1 :(得分:2)

代码应该是argv [1] ......

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    w.setGeometry(QRect(QPoint(100,100), QSize(1000,500)));

    CHat *hat = new CHat();
    hat->color(argv[1]);//"red"   ????  -->  argv[1]

    return a.exec();
}

这适用于commandLine:

./countHats "red"   or 
./countHats red

答案 2 :(得分:2)

首先,对于C / C ++中的任何应用程序:argv的第一个元素是程序的名称,因此argv [0]将是“countHats”而不是“red”。如果你想拥有更多的命令行参数,我建议使用boost :: program_options库,它非常易于使用且非常强大。 http://www.boost.org/doc/libs/1_54_0/doc/html/program_options.html