为什么不设置QLabel的像素图?

Dan*_*maa 5 qt qpixmap

我已经创建了一个QLabel我打算在一个中使用的子类QGraphicsView.它可以作为一个可移动的"点",可以点击并拖动图形视图.

创建自定义类并将其显示在图形视图中不是问题; 然而,尝试让自定义QLabel用我想要的图像绘制自己并没有发生.我的自定义QLabel类的构造函数是这样的:

TrackerPoint::TrackerPoint(QWidget *parent) :
    QLabel(parent)
{
    this->setFixedSize( 40, 40 );
    QPixmap pixmap( ":/images/target.png" );
    this->setPixmap( pixmap );
    this->setMask( pixmap.mask() );
}
Run Code Online (Sandbox Code Playgroud)

我确保images目录存在于运行应用程序的工作目录中.如果它完全相关,我的QRC文件是这样的:

<RCC>
<qresource prefix="/images">
<file>images/target.png</file>
</qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)

我一直试图解决这个问题好几天 - 任何关于为什么图像没有出现的想法都会很可爱.(这与我在构造函数中设置像素图的事实有关QLabel吗?)

roh*_*npm 6

你有:

<qresource prefix="/images">
<file>images/target.png</file>
</qresource>
Run Code Online (Sandbox Code Playgroud)

我认为这会导致images资源路径加倍,即:/images/images/target.png.为了解决这个问题,要么删除prefix="/images"或放alias="target.png"file标签.

为了使错误更清楚,您可以编写代码以便它使用QPixmap::load,因为可以检查错误:

QPixmap pixmap;
if (!pixmap.load( ":/images/target.png" )) {
    qWarning("Failed to load images/target.png");
}
this->setPixmap( pixmap );
Run Code Online (Sandbox Code Playgroud)

或者您可以更进一步使用QImageReader哪些可以提供详细的错误消息.