微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – 在Qt应用程序中获取命令行参数

以下片段来自我使用Qt框架编写的一个小应用程序.这个想法是,应用程序可以批处理模式运行(即由脚本调用),也可以以交互方式运行.

因此,我可以解析命令行参数,以便知道运行哪种模式.

[编辑]

我正在使用Ubuntu Karmic上的Qt Creator 1.3.1进行调试.参数以正常方式传递(即通过Qt Creator IDE中的“项目”设置添加参数).

当我运行应用程序时,似乎没有将参数传递给应用程序.下面的代码是我的main()函数代码段.

int main(int argc,char *argv[])
{
    //Q_INIT_RESOURCE(application);

    try {
        QApplication the_app(argc,argv);

        //trying to get the arguments into a list    
        QStringList cmdline_args = QCoreApplication::arguments();

        // Code continues ...
    }
    catch (const MyCustomException &e) { return 1; }

    return 0;
}

[更新]

我已经确定了这个问题 – 由于某些原因,尽管argc是正确的,但argv的元素是空字符串.

我把这个小代码片段打印出来,可以看出它们都是空的.

for (int i=0; i< argc; i++){
    std::string s(argv[i]); //required so I can see the damn variable in the debugger
    std::cout << s << std::endl;
}

有没有人知道如何在我的应用程序中检索命令行参数?

解决方法

如果你的argc和argv很好,我很惊讶,这是可能的,因为QApplication :: arguments()非常简单.注意 the source code.过滤#ifdefs for Linux,它只是:
QStringList QCoreApplication::arguments()
{
    QStringList list;
    if (!self) {
        qWarning("QCoreApplication::arguments: Please instantiate the QApplication object first");
        return list;
    }
    const int ac = self->d_func()->argc;
    char ** const av = self->d_func()->argv;
    for (int a = 0; a < ac; ++a) {
        list << QString::fromLocal8Bit(av[a]);
    }
    return list;
}

这就是你所拥有的有一个Unicode警告,我不会认为会适用于Karmic:

“在Unix上,此列表是由argc和argv参数构建的,该参数传递给main()函数中的构造函数,argv中的字符串数据使用QString :: fromLocal8Bit()进行解释,因此不可能通过例如,在latin1语言环境中运行的系统上的日语命令行参数.大多数现代Unix系统没有这些限制,因为它们是基于Unicode的.

您可以直接在argc和argv上尝试该代码的副本,看看会发生什么.

原文地址:https://www.jb51.cc/c/111513.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐