我正在尝试在 2D 网格上实现某种模拟游戏。
我有 8 种不同的图块基本图形,并希望在地图中保存指向图像数据的指针,以便我稍后可以通过定义为 enum(用于地图)。
我有一个image
类,它保存图像的标题和存储在std::vector<char>
. 图像类加载这些图像并将 a 返回std::vector<std::shared_pointer<image>>
到我的 GUI 类。由于我使用 Qt,我想存储共享指针以便QPixmap
稍后在我的地图上绘制它。
我的地图看起来像:
std::map<TERRAIN_TYPE, std::shared_ptr<QPixmap>> m_terrain_type_to_pixmap;
我像这样生成我的 QPixmap:
std::shared_ptr<QPixmap> pixmap_deep_water = std::make_shared<QPixmap>(m_tga_terrain_images[0]->pixel_data().data()); // pixel_data() gets the vector of bytes
我将它插入到地图中,如下所示:
m_terrain_type_to_pixmap.insert(std::pair<TERRAIN_TYPE, std::shared_ptr<QPixmap>>(TERRAIN_TYPE::DEEP_WATER, pixmap_deep_water));
我正在以这种方式访问元素:
auto test = m_terrain_type_to_pixmap.find(m_presenter.model.m_world.m_map[0].m_terrain_type)->second;
这是我的问题:
从我的地图中检索一个元素后,指针不指向任何数据(根据调试器,屏幕上只填充了白色瓷砖)。在我检索指针之前,调试器中的一切似乎都很好,但是检索到的地图元素似乎“丢失”了它们的数据。
QPixmap 没有带有指向(无符号)字符的指针的构造函数。
std::shared_ptr<QPixmap> pixmap_deep_water = std::make_shared<QPixmap>(m_tga_terrain_images[0]->pixel_data().data()); // pixel_data() gets the vector of bytes
您应该声明 QPixmap 并调用loadFromData()
.
QPixmap pixmap; // or std::shared_ptr<QPixmap>
std::vector<unsigned char>& imgdata=m_tga_terrain_images[0]->pixel_data();
pixmap.loadFromData(imgdata.data(), imgdata.size());
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句