c++ - 为什么将 QImage 声明为静态常量会产生无效值?
问题描述
我有一个QGraphicsItem
名为的对象ItemView
,我正在创建它的许多实例,它们都显示为QImage
我的QGraphicsView
.
我通过QImage
为 的每个实例创建一个新的来让它工作ViewItem
,但现在我试图将该属性转换为一个静态字段以进行优化,因为我真的只需要一个,而且我无法让它工作。
作为测试,我在static const int
旁边添加了一个QImage
,效果很好。
// .hh
class ViewItem : public QGraphicsItem
{
public:
...
private:
static const QImage IMAGE;
static const int TEST;
};
//.cc
const QImage ViewItem::IMAGE = QImage(":/data/data/img.png");
const int ViewItem::TEST = 30;
我的方法中的断点QGraphicsItem::paint()
显示 IMAGE 值,(invalid)
但 TEST30
按预期显示。
为什么它有效int
但无效QImage
?
解决方案
注意:对我来说,这是一个 XY 问题。我将为 X 问题提供一个解决方案,我建议您考虑您的 Y 问题,并可能提出另一个明确针对它的问题。
原因
ViewItem::IMAGE
您使用由 aQImage
构造的 a 进行初始化fileName
。根据文档:
如果图像加载失败,则此对象为空图像。
ViewItem::IMAGE
加载失败,因为资源文件在初始化时不可用。
X的解决方案
要获得预期的结果,而不是资源图像,请使用磁盘中的图像,该图像位于data/data/
构建文件夹的子文件夹中:
const QImage ViewItem::IMAGE = QImage("data/data/img.png");
初始化时图像将存在,因此构造函数将成功创建一个有效的QImage
. 要对此进行测试,请致电:
qDebug() << TEST << IMAGE;
在ViewItem
. 它会产生类似的结果:
30 QImage(QSize(256, 256),format=QImage::Format_ARGB32,depth=32,devicePixelRatio=1,bytesPerLine=1024,sizeInBytes=262144)
推荐阅读
- kubernetes - 使用 kubespray 安装 Kubernetes
- ios - fcm到达时如何从appdelegate添加childviewcontroller
- php - 获取未知属性
- php - 使用 GET 创建动态 URL(用于 href)
- django-rest-framework - 如何发布到具有 GenericForeignKey 的 modelViewSet?
- python - Pyinstaller 和键盘
- python - Pythons Pandas,在 GroupBy 对象“索引”上应用函数
- ios - “无效的配置文件:PayloadUUID '....' 在配置文件中多次使用
- bash - Bash paste -d "" 命令输出一个返回分隔文件
- bash - 将国家代码转换为表情符号