Последние пару часов я пытаюсь решить проблему с отображением иконки в QAction.
Проблема в том, что значок не отображается, на его месте «Дороги» размещается только расшифровка текста.
Я пытался отладить это и все время QPixmap NULL, похоже, что он не может найти файл.
Вот как выглядит мой код:
QPixmap icon(":/road.png");
QAction *A1 = new QAction(icon,"Road...", 0);
A1->setIconVisibleInMenu(true);
A1->setVisible(true);
connect(A1, SIGNAL(triggered()), SLOT(triggeredA1()));
я прочел Эта статья.
В соответствии с этим я изменил свой профессиональный файл, добавив строку:
RESOURCES = ./res/icons.qrc
В каталоге src я создал subdir ‘res’ и поместил туда мои иконки:
-src
--res
road.png
load.gif
done.gif
Вот как выглядит мой файл icons.qrc:
<RCC>
<qresource prefix="/">
<file>road.png</file>
<file>done.gif</file>
<file>load.gif</file>
</qresource>
</RCC>
Даже после всех этих манипуляций QPixmap еще НОЛЬ.
Что я делаю неправильно?
Решение:
Я использую OS X и построил Qt4 с MacPorts. По какой-то причине libpng не включен в сборку, предоставляемую MacPorts.
Итак, решение состоит в том, чтобы собрать libpng через MacPorts вручную:
sudo port install libpng
и включите эту библиотеку в свой проект, добавив следующую строку в файл .pro
LIBS += -lpng
После этого вы можете использовать файлы .png в вашем проекте, как было написано выше.
Вы можете использовать псевдоним и относительный «псевдо-путь»
пример
<qresource prefix="/images">
<file alias="foobar">resources/images/foobar.png</file>
</qresource>
затем используйте растровое изображение, как так
<pixmap resource="path/to/resourcefile.qrc">:/images/foobar</pixmap>