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

jdl*_*jdl 5 c++ qt

我想在Unix命令提示符下做一些事情:

./countHats("red")   or 
./countHats "red"
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能做到这一点?

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();
}
Run Code Online (Sandbox Code Playgroud)

lpa*_*app 14

你最好用 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();
}
Run Code Online (Sandbox Code Playgroud)

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

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


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

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

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