Warum funktioniert das Festlegen der Pixmap eines Qlabel nicht?
Frage
Ich habe eine Unterklasse von erstellt QLabel
dass ich beabsichtige, in a zu verwenden QGraphicsView
. Es dient als beweglicher "Punkt", auf den man klicken und die Grafikansicht durchziehen kann.
Das Erstellen der benutzerdefinierten Klasse und die Anzeige in der Grafikansicht war kein Problem. Der Versuch, den Brauch zu erhalten QLabel
sich mit dem von mir gewünschten Bild zu malen. Der Konstruktor für meinen Brauch QLabel
Klasse ist wie so:
TrackerPoint::TrackerPoint(QWidget *parent) :
QLabel(parent)
{
this->setFixedSize( 40, 40 );
QPixmap pixmap( ":/images/target.png" );
this->setPixmap( pixmap );
this->setMask( pixmap.mask() );
}
Ich habe sichergestellt, dass das Images -Verzeichnis im Arbeitsverzeichnis vorhanden ist, aus dem die Anwendung ausgeführt wird. Wenn es überhaupt relevant ist, ist meine QRC -Datei so:
<RCC>
<qresource prefix="/images">
<file>images/target.png</file>
</qresource>
</RCC>
Ich habe seit Tagen versucht, dieses Problem zu bewältigen - irgendwelche Ideen, warum das Bild nicht erscheint, wäre sehr schön. (Hat es mit der Tatsache zu tun, dass ich einen Pixmap in den Konstruktor des QLabel
?)
Lösung
Du hast:
<qresource prefix="/images">
<file>images/target.png</file>
</qresource>
Ich denke, dass dies zu einem Doppel führen wird images
im Ressourcenpfad dh dh :/images/images/target.png
. Um das zu beheben, entfernen Sie entweder das prefix="/images"
oder setzen alias="target.png"
in dem file
Schild.
Um es klarer zu machen, wo der Fehler ist, können Sie Ihren Code so schreiben, dass er verwendet wird QPixmap::load
, Da dies auf Fehler überprüft werden kann:
QPixmap pixmap;
if (!pixmap.load( ":/images/target.png" )) {
qWarning("Failed to load images/target.png");
}
this->setPixmap( pixmap );
Oder Sie könnten noch weiter gehen und verwenden QImageReader
Dies kann detaillierte Fehlermeldungen geben.