2013-07-17 10 views
6

W moim projekcie mam QLabel że często zmieniać pixmapę tak:(Qt C++) Zmienić rozmiar pixmapy i pikselu KEEP?

ui->frameLabel->setPixmap(slot_pic[blockId[currentSlot]][damageId[currentSlot]]); 

slot_pic jest po prostu Mapa 2D. Możesz więc spojrzeć na to jaśniej:

ui->frameLabel->setPixmap(pixmap); 

Zdjęcie ma rozmiar 16 x 16, a moja etykieta ma wymiary 32 x 32. Mam zaznaczone skaleContents, więc gdy zmienia się pixmapa, obraz ma podwójną wielkość. Obraz jest teraz rozmazany. Rozumiem, dlaczego, ale zastanawiałem się, czy istnieje sposób, aby go zatrzymać piksele. Chcę mieć większy pikselowany obraz. (Obraz jest z Minecraft czy to pomaga zrozumieć, co mam na myśli)

Dziękuję za poświęcony czas :)

+0

Istnieje kilka "RenderHints", które można ustawić w 'QPainter'. Możesz tam wyłączyć wygładzanie krawędzi. Nie jestem pewien, jak uzyskać 'QLabel :: paintEvent' do użycia tej flagi. –

+0

Nigdy nie zadzwoniłem z QPainter, więc będę musiał się w to zagłębić. Mapa pikseli nie jest tworzona w moim programie, tylko dlatego, że wiesz. To tylko plik png zasobów. Mam jeden mniejszy obraz, a po jego kliknięciu etykieta pokazuje ten sam obraz, ale większy. – mrg95

Odpowiedz

15

Nie pozwól QLabel zrobić skalowanie. Zamiast tego wykonaj skalowanie samodzielnie, używając QPixmap::scaled(). Coś takiego:

ui->frameLabel->setPixmap(
    pixmap.scaled(32, 32, Qt::IgnoreAspectRatio, Qt::FastTransformation)); 

Ważnym parametrem jest ostatni, transformMode, który mówi, czy filtrowanie bilinear jest używany lub nie.

+0

To działało PERFECTLY. Zero błędów i było proste. Dziękuję :) – mrg95

+0

Dzięki za miłą odpowiedź. Wiem o tym i myślałem o zastosowaniu tej techniki, ale szukam czegoś, co można ustawić bezpośrednio w Qt Designer (jeśli to możliwe) za pomocą arkusza stylów! Nic podobnego? Ktoś? – zeFree