Ver Mensaje Individual
  #6 (permalink)  
Antiguo 14/09/2016, 02:55
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 1 mes
Puntos: 10
Respuesta: Qt.QTableView. Varias dudas

Bueno, sigo con otra pega, que no sabía si ponerla en hilo aparte, pero bueno, como ha surgido a raíz de este ejercicio, la pongo aquí.

La cosa viene por el tema de no tener los iconos de la tabla duplicados, y que en cualquier parte del programa se acceda a una única instancia de ellos*. Así que he intentado implementar una clase con el patrón Singleton. Cuando hago ejemplos con la clase sola no tengo problemas, pero cuando intento usar un miembro de esa clase dentro de otra, me salen dos errores:
1.- Que la instancia de la clase no está inicializada
2.- Que el constructor copia es privado, así como la sobrecarga del operador =

Esta es la implementación (típica y copiada de las muchas que hay):

Código C++:
Ver original
  1. #include <QIcon>
  2.  
  3.  
  4. class IconoSexo
  5. {
  6.  
  7. private:
  8.      IconoSexo();
  9.      ~IconoSexo();
  10.     IconoSexo(const IconoSexo& I);
  11.     const IconoSexo& operator=(const IconoSexo& I);
  12.     QIcon imagen[2];
  13.  
  14.  
  15. public:
  16.     static IconoSexo& getIcon();
  17.     int male();
  18.     int female();
  19.  
  20. };



Código C++:
Ver original
  1. #include "iconsexo.h"
  2.  
  3. IconoSexo::IconoSexo()
  4. {
  5.     icono[0].addFile(QStringLiteral(":./iconos/niño.png"), QSize(), QIcon::Normal, QIcon::Off);
  6.     icono[1].addFile(QStringLiteral(":./iconos/niña.png"), QSize(), QIcon::Normal, QIcon::Off);
  7. }
  8.  
  9. IconoSexo::~IconoSexo()
  10. {
  11.  
  12. }
  13.  
  14. IconoSexo& IconoSexo::getIcon()
  15. {
  16.     static IconoSexo instance;
  17.     return instance;
  18. }
  19.  
  20. int IconoSexo::male()
  21. {
  22.     return imagen[0];
  23. }
  24.  
  25. int IconoSexo::female()
  26. {
  27.     return imagen[1];
  28. }

Y ahora intento hacer uso de ellos, por ejemplo en el modelo:

mimodelo.h:

Código C++:
Ver original
  1. class MiModel : public QAbstractTableModel
  2. {
  3.     //Q_OBJECT
  4.  
  5. public:
  6.     MiModel(QObject *parent=0);
  7.     int rowCount(const QModelIndex &parent)const;
  8.     int columnCount(const QModelIndex &parent)const;
  9.     QVariant headerData(int section, Qt::Orientation orientation, int role)const;
  10.     QVariant data(const QModelIndex &index, int role)const;
  11.     Qt::ItemFlags flags(const QModelIndex&index) const;
  12.     bool setData(const QModelIndex &index, const QVariant &value, int role);
  13.     bool insertRows(int row, int count, const QModelIndex &parent);
  14.     bool removeRows(int row,int count, const QModelIndex&parent);
  15.  
  16.     void rellenarLista();
  17.  
  18. signals:
  19.     void HaCambiadoElModelo(const QModelIndex &index, const QVariant &value);
  20.  
  21. private:
  22.  
  23.     const int ImageIndexRole = Qt::UserRole+1;
  24.     QList<QStringList>lista;
  25.     IconoSexo &icono;
  26. };
Código C++:
Ver original
  1. MiModel::MiModel(QObject *parent):QAbstractTableModel(parent)
  2. {
  3.     icono = IconoSexo::getIcon();
  4.     rellenarLista();
  5. }

Y aquí aparece el problema

*sugerencia de eferion en este otro hilo que abrí, que ahora he remirado y que ya estaba preguntando muchas de las cosas que pregunto ahora, y que encima veo que hace un año sabía más que ahora :(
http://www.forosdelweb.com/f96/qt-de...strar-1123072/
__________________
Mi calculadora en Qt

Última edición por dehm; 14/09/2016 a las 02:58 Razón: añadir la definicion de la clase MiModel