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?)

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top