【问题标题】:Why doesn't setting the pixmap of a QLabel work?为什么设置 QLabel 的像素图不起作用?
【发布时间】:2011-06-02 12:52:39
【问题描述】:

我创建了一个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() );
}

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

<RCC>
<qresource prefix="/images">
<file>images/target.png</file>
</qresource>
</RCC>

我几天来一直在尝试解决这个问题——任何关于为什么图像没有出现的想法都会很可爱。 (这是否与我在QLabel 的构造函数中设置像素图有关?)

【问题讨论】:

  • 也许您确实通过 TrackerPoint::paintEvent 覆盖了 paintEventQLabel
  • ctor 的使用应该没问题。尽管在大多数情况下不需要子类化。您是否尝试在图形场景之外创建标签?你试过 QGraphicsPixmapItem 吗?

标签: qt qpixmap


【解决方案1】:

你有:

<qresource prefix="/images">
<file>images/target.png</file>
</qresource>

我认为这将导致资源路径中出现双重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 );

或者您可以更进一步,使用QImageReader,它可以提供详细的错误消息。

【讨论】:

  • 非常感谢!这解决了我的问题。另外,切线,如果我想在我的 QLabel 中使用 PNG 透明度,我需要做些什么特别的事情吗?
  • 不,你不需要做任何特别的事情,除了 Qt PNG 插件。
猜你喜欢
  • 2019-05-28
  • 1970-01-01
  • 1970-01-01
  • 2016-09-25
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
相关资源
最近更新 更多