Cita: Hola eferion:
Con esa interfaz es imposible recuperar los iconos ya que no hay ningún método público que devuelva un QIcon.
La verdad es que las pruebas las hago en CodeBlocks, y para no andar configurándolo para que funcione con Qt, la clase que estaba haciendo devolvía un
int en lugar de un
QIcon, suficiente para mis pruebas. Luego he intentado adaptarla en el mensaje y se me pasó corregir eso
Pero bueno, al lío. La cosa es que no he pillado la idea de la clase que planteas. Es decir, estas líneas, qué han de hacer?:
Código C++:
Ver originalif( it == _icons.end() )
{
// algoritmo para cargar el icono
// ...
// Se añade el icono a la caché
it = _icons.insert(std::make_pair(type,icon));
Yo por ahora he hecho esto, pero creo que no es para nada la idea que me estás planteando:
Código C++:
Ver original#include <iostream>
#include <map>
using namespace std;
enum class Sexo
{
undefined, male, female
};
std::map<Sexo,string>init()
{
std::map<Sexo,string>temp;
temp.insert(std::pair<Sexo, string>(Sexo::undefined,"No definido"));
temp.insert(std::pair<Sexo, string>(Sexo::male,"Niño"));
temp.insert(std::pair<Sexo, string>(Sexo::female,"Niña"));
return temp;
}
class IconoWareHouse
{
private:
static std::map<Sexo,string>_icons;
public:
IconoWareHouse() {}
static string GetIcon(Sexo type)
{
auto it = _icons.find(type);
cout<<&it->second<<endl;//compruebo que es la misma variable
if( it == _icons.end() )
{
// algoritmo para cargar el icono
// ...
// Se añade el icono a la caché
//it = _icons.insert(std::make_pair(type,icon));
}
cout<<(int)it->first<<endl;
return it->second;
}
};
std::map<Sexo,string> IconoWareHouse::_icons(init());
//Funcion principal
int main()
{
IconoWareHouse I;
cout<<I.GetIcon(Sexo::female)<<endl;
IconoWareHouse II;
cout<<II.GetIcon(Sexo::female)<<endl;
return 0;
}
Como ves, en este caso he sustituido el