Estoy intentando crear una aplicación de consola con Qt
y he tenido un comportamiento realmente extraño al intentar recuperar los argumentos. Mi clase se deriva de QCoreApplication
que tiene una función que normalmente debería poner todos los argumentos en alguna lista de strings
. Pero en algunos casos esa llamada termina en una falla de segmentación.los argumentos del usuario están vacíos con QCoreApplication en casos misteriosos
Aquí está el código:
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);
}
}
Al compilar y ejecutar el código anterior, Todo funciona bien, pero cuando me elimine la línea en el constructor Diagramm
's Tengo un error de segmentación en la primera línea de la función testArguments
(la llamada a arguments()
)
que he estado en que durante horas, la lectura de documentación de Qt, foros ... ¿Alguien sabe de dónde puede venir eso? Cualquier idea sería muy apreciada.
Nota: No estoy llamando a la función exec
a propósito porque no necesito ningún bucle de evento.
Eso fue todo. Muchas gracias ! Para otros, el código anterior debe ser: (en main.cpp) 'Aplicación Diagramm (argc, &argv);' (en Diagramm.cpp) 'Diagramm :: Diagramm (int & argc, char ** argv []): QApplication (argc, * argv) ' – Ote