2013-07-17 5 views
6

В моем проекте у меня есть QLabel, что я изменить растровое изображение часто, как это:(Qt C++) Изменение размера pixmap и KEEP?

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

slot_pic просто 2d карта. Таким образом, вы можете посмотреть на это более ясным, как это:

ui->frameLabel->setPixmap(pixmap); 

Изображение 16x16 размера, и мой лейбл 32х32. У меня scaledContents проверены, поэтому при изменении pixmap изображение имеет двойной размер. Однако изображение теперь размыто. Я понимаю, почему, но мне было интересно, есть ли способ заставить его оставаться неровным. Я хочу просто увеличить изображение в пикселях. (Изображение из Minecraft, если это поможет вам понять, что я имею в виду)

Спасибо за ваше время :)

+0

Есть несколько «RenderHints», которые вы можете установить в 'QPainter'. Там вы можете отключить сглаживание. Я не уверен, как использовать 'QLabel :: paintEvent' для использования этого флага. –

+0

Я никогда не сталкивался с QPainter, поэтому мне придется заглянуть в него. Пиксельная карта не создается в моей программе, так что вы знаете. Это всего лишь ресурс png-файла. У меня есть одно уменьшенное изображение, и когда вы нажимаете его, метка показывает одно и то же изображение, но больше. – mrg95

ответ

15

Не позволяйте QLabel сделать масштабирование. Вместо этого сделайте масштабирование самостоятельно, используя QPixmap::scaled(). Что-то вроде этого:

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

Важным параметром является последним, transformMode, который говорит, является ли билинейная фильтрация или нет.

+0

Это работало СОВЕРШЕННО. Нулевые ошибки и были просты. Спасибо :) – mrg95

+0

Спасибо за хороший ответ. Я знаю об этом и думал об использовании этой техники, но я ищу что-то, что можно установить непосредственно в Qt Designer (если возможно) с помощью стилей! Что-нибудь подобное? Кто угодно? – zeFree

Смежные вопросы