2011-01-02 27 views
5

He creado una subclase de QLabel que tengo la intención de utilizar en un QGraphicsView. Sirve como un "punto" móvil que se puede hacer clic y arrastrar alrededor de la vista de gráficos.¿Por qué no funciona el pixmap de una QLabel?

Crear la clase personalizada y que se muestre en la vista de gráficos no ha sido un problema; sin embargo, tratar de hacer que el personalizado QLabel se pinte con la imagen que quiero no está sucediendo. El constructor de mi clase personalizada QLabel es así:

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

me ha asegurado que existe el directorio de imágenes en el directorio de trabajo que la aplicación se ejecuta desde. Si es relevante en absoluto, mi archivo QRC es así:

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

Me he estado tratando de hacer frente a este problema desde hace días - alguna idea de por qué la imagen no aparece sería precioso. (? ¿Tiene que ver con el hecho de que estoy estableciendo un mapa de píxeles en el constructor de la QLabel)

+0

Quizás usted anuló 'paintEvent' de' QLabel' mediante 'TrackerPoint :: paintEvent'? – ismail

+0

El uso del ctor debería estar bien. Aunque la Subclasificación no debería ser necesaria en la mayoría de los casos. ¿Intentó crear una etiqueta fuera de la escena gráfica? ¿Intentó QGraphicsPixmapItem? –

Respuesta

6

tiene:

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

creo que esto dará lugar a un doble en el images ruta del recurso, es decir, :/images/images/target.png. Para solucionarlo, elimine prefix="/images" o ponga alias="target.png" en la etiqueta file.

para hacerlo más claro dónde está el error, podría escribir el código para que utilice QPixmap::load, ya que se puede comprobar por errores:

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

o usted podría ir aún más lejos y utilizar QImageReader que puede dar mensajes de error detallados.

+0

¡Muchas gracias! Eso resolvió mi problema. Además, tangencialmente, si quiero usar transparencia PNG en mi QLabel, ¿hay algo especial que deba hacer? –

+0

No, no necesita hacer nada especial que no sea tener el complemento Qt PNG. –

Cuestiones relacionadas