2011-01-02 14 views
5

Stworzyłem podklasę QLabel, którą zamierzam użyć w QGraphicsView. Służy jako ruchomy "punkt", który można kliknąć i przeciągnąć wokół widoku graficznego.Dlaczego nie działa ustawienie pixelapy obiektu QLabel?

Tworzenie niestandardowej klasy i wyświetlanie jej w widoku graficznym nie stanowiło problemu; jednak próba uzyskania niestandardowego QLabel malowania się obrazem, którego chcę, nie ma miejsca. Konstruktor dla mojego niestandardowy QLabel klasy jest tak:

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

mam zapewnione, że katalog zdjęć istnieje w katalogu roboczym, że aplikacja jest uruchamiana od. Jeśli jest to istotne w ogóle, mój plik QRC jest tak:

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

Próbowałem poradzić sobie z tym problemem przez kilka dni - jakieś pomysły, dlaczego obraz nie pojawia byłby piękny. (? Czy to ma coś wspólnego z faktem, że jestem wyznaczając pixmapę w konstruktora QLabel)

+0

Być może zastąpiłeś 'paintEvent' z' QLabel' przez 'TrackerPoint :: paintEvent'? – ismail

+0

Użycie ctor powinno być w porządku. Mimo że podklasy nie powinny być w większości przypadków konieczne. Czy próbowałeś stworzyć etykietę poza grafiką? Czy próbowałeś QGraphicsPixmapItem? –

Odpowiedz

6

Masz:

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

myślę, że będzie to skutkować podwójnym images w ścieżka zasobu, tj. :/images/images/target.png. Aby to naprawić, usuń prefix="/images" lub wstaw alias="target.png" w tagu file.

Żeby było jaśniej gdzie jest błąd, można napisać kod tak, że używa QPixmap::load, ponieważ mogą być sprawdzane pod kątem błędów:

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

Albo można pójść jeszcze dalej i użyć QImageReader które mogą podawaj szczegółowe komunikaty o błędach.

+0

Dziękuję bardzo! To rozwiązało mój problem. Ponadto, jeśli chcę użyć przezroczystości PNG w moim QLabel, czy jest coś specjalnego, co muszę zrobić? –

+0

Nie, nie musisz robić nic specjalnego poza wtyczką Qt PNG. –