在神秘的情况下,QCoreApplication的用户参数是空的

我试图创build一个与Qt控制台应用程序,并试图检索参数时,面临着非常奇怪的行为。 我的类是从QCoreApplication派生的,它有一个函数,通常应该把所有的参数放在一些strings列表中。 但在某些情况下,这种通话以分段故障结束。

代码如下:

main.cpp中

 #include "Diagramm.h" int main(int argc, char *argv[]) { Diagramm application(argc, argv); application.run(); return EXIT_SUCCESS; } 

Diagramm.h

 #include <QCoreApplication> #include <iostream> #include <QStringList> #include <QFile> #include <QDebug> class Diagramm : public QCoreApplication { Q_OBJECT public: Diagramm(int argc, char *argv[]); void run(); private: void testArguments(); signals: public slots: }; 

Diagramm.cpp

 #include "Diagramm.h" Diagramm::Diagramm(int argc, char *argv[]) : QCoreApplication(argc, argv) { //std::cout << "calling Diagramm constructor" << std::endl; } void Diagramm::run() { testArguments(); } void Diagramm::testArguments() { //get source and target files from arguments QStringList arguments = this->arguments(); if(arguments.count() < 2) { std::cout << "Missing arguments" << std::endl; return exit(1); } } 

当编译和执行上面的代码时,一切工作正常,但是当我取消注释在Diagramm的构造函数中的行我已经在函数testArguments的第一行(调用arguments() )的分段错误

我已经花了几个小时,阅读Qt的文档,论坛…有谁知道哪里可以从哪里来? 任何想法将不胜感激。

注意:我没有故意调用exec函数,因为我不需要任何事件循环。

Q(核心)应用程序需要 通过引用 argcargv ,所以你的构造函数应该阅读

 Diagramm(int& argc, char **argv[]) 

如果你不这样做,它可能在某些情况下工作,并导致segfaults或在别人奇怪的行为,如你遇到的。 似乎是一个常见的错误,阅读文档时不容易发现。

arguments()是一个静态函数,所以行应该是:

 QStringList arguments = QCoreApplication::arguments();