でコンソールアプリケーションを作成しようとし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
イベントループが必要ないため、意図的に関数を呼び出していません。