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

标签 c++ qt qt-creator

以下代码片段来 self 使用 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 的元素是空字符串。

我用这个小代码片段打印出 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 .为 Linux 过滤 #ifdefs,它只是:

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 上,此列表是根据传递给 main() 函数中的构造函数的 argc 和 argv 参数构建的。argv 中的字符串数据使用 QString::fromLocal8Bit() 进行解释;因此它是例如,无法在以 Latin1 语言环境运行的系统上传递日文命令行参数。大多数现代 Unix 系统没有此限制,因为它们是基于 Unicode 的。”

您可以直接针对您的 argc 和 argv 尝试复制该代码,看看会发生什么。

关于c++ - 在 Qt 应用程序中获取命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2918353/

相关文章:

c++ - 将模板参数作为目标类型传递

c++ - move 分配时左侧 std::vector 资源会发生什么情况?

c++ - 使用 rand() 在除法表中生成数字

c++ - 为什么在动态分配的数组上调用 delete 会导致一个崩溃而不是另一个?

c++ - qtcreator 没有使用指定的编译器

Qt 使用 CMake : ui_mainwindow. h:没有这样的文件或目录

c++ - 如何从 Qt 中的函数引用表单并更改属性(高度和宽度)

c++ - 并行 OpenMP 缩减与函数定义?

c++ - 如果给定文本样式,如何获取特定文本的 QSize 对象

c++ - 我不需要点和点