2012-11-12 2 views
6

Мне нужно создать меню, которое изменяет фон QWidget. Я хотел бы разместить QIcon, который представляет выбранный цвет в QActions, который заполняет QMenu. Я бы не хотел выскочить из Photoshop и нарисовать значки вручную. Можно ли запрограммировать простой значок, заполненный определенным цветом? Таким образом, я могу иметь произвольное количество QActions, если это необходимо, и мне не придется создавать целую кучу значков в Photoshop. \Простые заливки цвета QIcons в Qt

ответ

12

Вы можете построить QIcon из QPixmap. QPixmap может быть сконструирован с заданным размером, а затем заполнен цветом с использованием «fill».

Например, чтобы создать красный 100x100 значок:

QPixmap pixmap(100,100); 
pixmap.fill(QColor("red")); 
QIcon redIcon(pixmap); 
+0

Это заполнит только прозрачные части изображения, правильно? Я имею в виду, можно ли это использовать для заполнения прозрачных частей QIcon цветом? – SexyBeast

+0

Боюсь, я не понимаю. Этот код создает совершенно новый значок, который является сплошным красным квадратом. – cgmb

5

Просто понял, как изменить цвет от значка до любого другого цвета. Таким образом, изображение значка должно состоять из одного сплошного цвета (здесь: «черный»), которые могут быть преобразована с помощью растрового изображения и его маскирующей способности в другой цвет (например, «красный»):

pixmap = QPixmap(filename) 
mask = pixmap.createMaskFromColor(QColor('black'), Qt.MaskOutColor) 
pixmap.fill((QColor('red'))) 
pixmap.setMask(mask) 

btNew = QToolButton() 
btNew.setIcon(QIcon(pixmap)) 
+0

Прохладный, хотя createMaskFromColor (QColor ('transparent'), Qt.MaskInColor) работает лучше для меня – falkb

+0

Тема помечена C++, но это не допустимый код C++. Хотелось бы отредактировать его, но рецензенты отклонили его по причинам, которые я не знаю. Кроме того, решение работало для меня после переноса его на C++. – bns

+0

Я думаю, что вы правы - я не понимал, что вопрос связан с C++, но я также думаю, что это не значит, что изменить уже существующий ответ так много ... И я не знаю, является ли ваш код стабильный - поэтому я не могу принять его для себя. Я думаю, вы должны ответить сами! Спасибо за подсказку. – Henhuy

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