我试图创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(核心)应用程序需要 通过引用 argc
和argv
,所以你的构造函数应该阅读
Diagramm(int& argc, char **argv[])
如果你不这样做,它可能在某些情况下工作,并导致segfaults或在别人奇怪的行为,如你遇到的。 似乎是一个常见的错误,阅读文档时不容易发现。
arguments()是一个静态函数,所以行应该是:
QStringList arguments = QCoreApplication::arguments();