我正试图用Qt
创建一个控制台应用程序,但在尝试检索参数时遇到了非常奇怪的行为。我的类是从QCoreApplication
派生的,它有一个函数,通常应该将所有参数放在strings
的某个列表中。但在某些情况下,该调用以分段错误结束。
这是代码:
main.cpp
#include "Diagramm.h"
int main(int argc, char *argv[])
{
Diagramm application(argc, argv);
application.run();
return EXIT_SUCCESS;
}
图表
#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:
};
图表.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[])
如果你不这样做,它可能在某些情况下起作用,并在其他情况下导致分段故障或奇怪的行为,就像你遇到的那样。这似乎是一个常见的错误,在阅读文档时不容易发现。
arguments()是一个静态函数,因此行应该是:
QStringList arguments = QCoreApplication::arguments();