Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/11/2014, 03:37
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 2 meses
Puntos: 10
Qt. Tipos nativos de Qt o estandar de C++?

Hola:

Otra duda existencial sobre Qt.
El caso es que se supone que lo más recomendable es usar los tipos propios de Qt si queremos garantizar la mejor compatibilidad entre plataformas.
Así es recomendable usar qint8 en lugar de char, qint32 en lugar de int, QList<> en lugar de std::list<>, etc....
El problema es que si se usan los tipos "propios", la aplicación es 100% Qt, con las garantías de que los tipos funcionarán bien en todas las plataformas en las que compila Qt.
Pero al mismo tiempo, la aplicación pierde la estandarización de ser C++.
En mi caso estoy haciendo una aplicación que primero he terminado (bueno,casi...) en C++. Toda ella se maneja por medio de un menú en el main.cpp hecho para la consola.

Ahora para portarla a Qt, es tan fácil, porque sólamente hay que cambiar cada opción del menú por su correspondiente equivalencia en Qt (cuadros de diálogo para entrada de datos, botones para acciones,en fin....equivalencia 100%)

En lo poco que llevo hecho, la estrategia ha sido convertir los tipos de Qt a los tipos C++.
Por ejemplo, si creo un documento nuevo, he de definir dos parámetros que luego llevará el constructor.
Dichos parámetros los recogen dos QLineEdit, por lo que se guardan en QString

Pero el constructor se inicia con:
Código C++:
Ver original
  1. (std::string Codigo,std::string Resumen)

En este caso, es fácil puesto que puedo convertir los datos que recoge el cuadro de diálogo y pasarlos a std:string
Código C++:
Ver original
  1. (cuadro->LeeCodigo().toStdString(),cuadro->LeeResumen().toStdString())

Pero ahora llego al momento de trabajar con ficheros. Y ahora me veo obligado a hacer una chapucilla para mantener el código original C++ y usar métodos de Qt para abrir ficheros:
Código C++:
Ver original
  1. QString filename = QFileDialog::getOpenFileName(this);
  2.     NuevaInstancia.nombrefichero = filename.toStdString();
  3.     QFile file(filename);
  4.     std::ifstream ifs (NuevaInstancia.nombrefichero.c_str(), std::ios::in|std::ios::binary);
  5.     if (file.open(QIODevice::ReadOnly|QIODevice::Text))
  6.     {
  7. .....................

Como se ve, hago uso de QFile y de std::ifstream, ya que la aplicación realmente lee desde un objeto ifstream. Y aqui no hay conversiones sobre la marcha. O leo desde un QFile o desde un std::ifstream. Si opto por lo primero, definitivamente debería de cambiar las funciones originales.
De este problema me ha venido la reflexión.

Total, después de tanto rollo, la pregunta es:
¿Qué estrategia usáis para portar las aplicaciones? ó ¿Directamente trabajáis en Qt?
¿Que véis que sea mejor?

Bueno, saludos y gracias!