Sto provando a creare un'applicazione console con Qt
e ho riscontrato un comportamento davvero strano quando si tenta di recuperare gli argomenti. La mia classe è derivata da QCoreApplication
che ha una funzione che normalmente dovrebbe mettere tutti gli argomenti in una lista di strings
. Ma in alcuni casi la chiamata termina con un errore di segmentazione.Gli argomenti dell'utente sono vuoti con QCoreApplication in casi misteriosi
Ecco il codice:
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);
}
}
Quando la compilazione e l'esecuzione del codice di cui sopra, tutto funziona Va bene, ma quando ho il commento dalla riga nel costruttore Diagramm
s' Ho un errore di segmentazione sulla prima riga della funzione testArguments
(la chiamata a arguments()
)
Sono stato su per ore, la lettura doc Qt, forum ... Qualcuno sa da dove può venire? Qualsiasi idea sarebbe molto apprezzata.
Nota: non sto chiamando la funzione exec
di proposito perché non ho bisogno di alcun ciclo di eventi.
Era così. Molte grazie ! Per gli altri, il codice sopra dovrebbe essere: (in main.cpp) 'Diagramm application (argc, &argv);' (in Diagramm.cpp) 'Diagramm :: Diagramm (int & argc, char ** argv []): QApplication (argc, * argv) ' – Ote