【问题标题】:How to call a function with argc & argv?如何使用 argc 和 argv 调用函数?
【发布时间】:2014-09-15 10:20:05
【问题描述】:

我目前正在尝试使用 QT 为现有的命令行程序创建 GUI,作为学习练习。

原始代码是用 c 编写的,我已经包含了 c++ 位的 c 包装器。我拿了原版

int main(int argc, char **argv)

并把它变成一个正常的功能(改变了名字)。

我有几个 qt 复选框用作输入,(例如 -v 在 cmdline 中激活了详细,所以现在我有一个详细的复选框,使 char verbose = 到“v”)

还有其他几个带数字的参数,例如 -t 4 表示 4 个线程。

原程序中的选项是这样实现的:

while ((opt = getopt(argc, argv, "vqnrik1eE:P:NTX:F:t:h?f:o:s:")) != -1) {
    switch (opt) {
case 'v':
        verbose = 2;
        break;

如何将所有这些不同的选项称为标准函数?我可以将整个参数写入一个大字符串并在可能的情况下将其输入,但我该怎么做呢?

谢谢,

【问题讨论】:

  • 命令行程序在做什么?它总是运行得很快(即不到十分之一秒)吗?如果它可以在几秒钟内运行,那么您的方法是错误的(您不能将 GUI 冻结几秒钟)

标签: c++ c qt


【解决方案1】:

您可能应该远离参数并直接设置控制变量:

if(verboseCheckBox->checked()){
    verbose=2;
}
//etc.

【讨论】:

    【解决方案2】:

    只需像这样调用一个字符串数组:

    char* argv[4] = {executing_path, "-t 4","v","random_argument"};
    const int argc = sizeof(argv)/sizeof(char*);
    main(argc, argv);
    

    请注意,第一个参数通常是您在主函数中收到的可执行文件的完整路径。如果可能的话,我会保持同样的行为;有时,代码解析参数在1... n-1 范围内执行,因此会跳过数组中的第一个值。

    既然您知道该怎么做,我也建议您不要这样做。由于您已经在源代码中,您可能应该使用直接方法调用来将选项设置为他的回答中解释的棘轮怪胎。

    【讨论】:

      猜你喜欢
      • 2012-08-16
      • 2011-04-25
      • 2011-12-18
      • 1970-01-01
      • 2013-03-09
      • 2020-06-26
      • 2012-03-06
      • 2023-03-25
      • 2017-09-29
      相关资源
      最近更新 更多