2011-01-02 12 views
5

Ho creato una sottoclasse di QLabel che intendo utilizzare in un QGraphicsView. Serve come un "punto" mobile su cui è possibile fare clic e trascinare la vista grafica.Perché non funziona la pixmap di una QLabel?

Creare la classe personalizzata e visualizzarla nella vista grafica non è stato un problema; tuttavia, cercare di ottenere l'immagine personalizzata da QLabel con l'immagine che desidero non sta accadendo. Il costruttore per la mia classe personalizzata QLabel è in questo modo:

TrackerPoint::TrackerPoint(QWidget *parent) : 
    QLabel(parent) 
{ 
    this->setFixedSize(40, 40); 
    QPixmap pixmap(":/images/target.png"); 
    this->setPixmap(pixmap); 
    this->setMask(pixmap.mask()); 
} 

ho assicurato che la directory immagini esiste nella directory di lavoro che l'applicazione viene eseguito da. Se è rilevante a tutti, il mio file QRC è in questo modo:

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

Ho cercato di affrontare questo problema per giorni - tutte le idee sul perché l'immagine non appare sarebbe bello. (? Ha a che fare con il fatto che sto impostando un pixmap nel costruttore della QLabel)

+0

Forse hai sovrascritto 'paintEvent' di' QLabel' tramite 'TrackerPoint :: paintEvent'? – ismail

+0

L'uso del Ctor dovrebbe andare bene. Sebbene la sottoclasse non dovrebbe essere necessaria nella maggior parte dei casi. Hai provato a creare un'etichetta al di fuori del graphicsscene? Hai provato QGraphicsPixmapItem? –

risposta

6

Hai:

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

Penso che questo si tradurrà in un doppio images nel percorso delle risorse, ovvero :/images/images/target.png. Per risolvere ciò, rimuovere prefix="/images" o inserire alias="target.png" nel tag file.

per renderlo più chiaro dove l'errore è, si potrebbe scrivere il codice in modo che utilizzi QPixmap::load, dal momento che può essere controllato per errori:

QPixmap pixmap; 
if (!pixmap.load(":/images/target.png")) { 
    qWarning("Failed to load images/target.png"); 
} 
this->setPixmap(pixmap); 

Oppure si potrebbe andare anche oltre e utilizzare QImageReader che può dare messaggi di errore dettagliati.

+0

Grazie mille! Questo ha risolto il mio problema. Inoltre, tangenzialmente, se voglio usare la trasparenza PNG nella mia QLabel, c'è qualcosa di speciale che devo fare? –

+0

No, non devi fare nulla di speciale se non avere il plugin Qt PNG. –