Почему не работает настройка растрового изображения QLabel? - PullRequest
5 голосов
/ 02 января 2011

Я создал подкласс 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?)

1 Ответ

6 голосов
/ 03 января 2011

У вас есть:

<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, который может выдавать подробные сообщения об ошибках.

...