7

我想从 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();
}
4

3 回答 3

16

你最好用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,为什么我们要这样做,你应该为你的二传手使用一个更好的名字,比如setColor. color()通常用于获取颜色的值,而不是设置它,但现在这有点离题了。我也只是想帮你指出这一点。

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

但是请注意,我和 David Faure 一直在研究一个QCommandLineParser你可以从 Qt5.2 开始使用的类。现在正在审查 gerrit 上的更改以进行集成。

于 2013-08-17T07:57:28.487 回答
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

于 2013-08-17T16:48:53.990 回答
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();
}

这适用于命令行:

./countHats "red"   or 
./countHats red
于 2013-08-16T19:41:48.900 回答