【发布时间】:2011-02-24 11:46:48
【问题描述】:
以下 sn-p 来自我使用 Qt 框架编写的一个小应用程序。这个想法是应用程序可以以批处理模式运行(即由脚本调用)或可以交互运行。
因此,重要的是,我能够解析命令行参数以了解在哪种模式下运行等。
[编辑]
我在 Ubuntu Karmic 上使用 Qt Creator 1.3.1 进行调试。参数以正常方式传递(即通过 Qt Creator IDE 中的“项目”设置添加它们)。
当我运行应用程序时,似乎没有将参数传递给应用程序。下面的代码是我的 main() 函数的 sn-p。
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 的元素是空字符串。
我用这个小代码 sn-p 打印出 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;
}
有人知道如何在我的应用程序中检索命令行参数吗?
【问题讨论】:
-
你的 try/catch 上有一个额外的大括号。你没有给我们实用程序::option_values 的代码......你不能把这个例子简化为说 if cmdline_args.isEmpty() print "oh no!" 吗?如果你这样做了,你还会遇到问题吗?
-
顺便问一下,utility::options_values 是什么?我在 Qt 文档中也没有看到类似的东西。此外,即使您不传递参数,第一个参数也将始终是程序名称。所以我认为问题可能出在实用程序::option_values 中。你也试过检查 argv[0],argv[1] 等...也试试那个..
标签: c++ qt qt-creator