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

Retrieving command line arguments in a Qt application

本文关键字:命令行 参数 检索 Qt 应用程序 正在      更新时间:2023-10-16

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

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

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

然而,请注意,我和David Faure一直在开发一个QCommandLineParser类,希望您可以从Qt5.2开始使用它。现在正在审查gerrit上的更改以进行集成。

代码应该是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

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