Duda de Qt

Hola chicos,

Estoy aprendiendo Qt por mi cuenta y me gustaría saber si hay manejo de excepciones nativo de Qt, no el de C++ (try-catch).
Lo que quiero es que se puedan capturar errores críticos de Qt, con el try-catch de C++ no se capturan.

Utilizo Qt 4.5.2
Sanguinario escribió:Hola chicos,

Estoy aprendiendo Qt por mi cuenta y me gustaría saber si hay manejo de excepciones nativo de Qt, no el de C++ (try-catch).
Lo que quiero es que se puedan capturar errores críticos de Qt, con el try-catch de C++ no se capturan.

Utilizo Qt 4.5.2


Lo has buscado en el assistant?? Alli en teoria esta todo sobre QT.
No se si se puede, yo de Qt aun estoy algo verde a nivel de codigo, tiro mas de designer xD
Sí, lo he buscado, pero no he visto nada relevante, hay muchas cosas relacionadas con el tema, pero nada que se le parezca a lo que quiero. Lo único que he visto es una función que captura los errores de la clase de gestión de ficheros XML...

Seguiré buscando a ver qué veo, aunque no estaría mal que alguien me arrojara un poco de luz sobre el tema, pero me da que no tiene un buen soporte de excepciones como el C++ normal...
Qt no se basa ni utiliza excepciones. Usa valores de retorno para comprobar el resultado de una llamada.

Poniendo un ejemplo la clase QFile define los siguientes códigos de error:

enum FileError { NoError, ReadError, WriteError, FatalError, ..., CopyError }

Cada método de la clase tiene un valor de retorno que indica si ha habido error o ha sido un éxito.

Por ejemplo, bool QFile::open(...) devuelve true si se ha abierto correctamente y false si ha habido un error. Para comprobar el error simplemente hay que llamar a la funcion FileError QFile::error() y te indica la razón con detalle.

Es muy al estilo C puro, las llamadas open, etc. devuelven -1 y dejan en la variable errno la causa del fallo.

Luego hay casos en los que las llamadas son asíncronas y son ejecutadas por el hilo principal de Qt.

Para gestionar los errores de esas llamadas se utilizan "Signals and slots".

http://doc.trolltech.com/4.5/signalsandslots.html

Un objeto que trabaja de forma asíncrona, por ejemplo es QAccessNetworkManager. Y tiene definidas una serie de señales que emite en diversas circunstancias para que las conectes a tus métodos y gestiones las diversas situaciones. QAccessNetworkManager emite estas señales dependiendo de como resulte la operación:

void authenticationRequired ( QNetworkReply * reply, QAuthenticator * authenticator )
void finished ( QNetworkReply * reply )
void proxyAuthenticationRequired ( const QNetworkProxy & proxy, QAuthenticator * authenticator )
void sslErrors ( QNetworkReply * reply, const QList<QSslError> & errors )

Personalmente no me gustan las excepciones y prefiero evaluar cada resultado de cada llamada por mi cuenta.

Aquí te dejo un hilo en el que la gente habla del tema:
http://lists.trolltech.com/qt-interest/ ... 054-0.html

Un saludo.
3 respuestas