2012-11-12 24 views
6

Tôi cần tạo một menu thay đổi nền của QWidget. Tôi muốn đặt một QIcon đại diện cho màu sắc được lựa chọn vào QActions mà điền QMenu. Tôi muốn không phải bật ra Photoshop và vẽ các biểu tượng theo cách thủ công. Có thể lập trình một biểu tượng đơn giản được lấp đầy bằng một màu nhất định không? Bằng cách này, tôi có thể có một số lượng QActions tùy ý nếu cần, và tôi sẽ không phải tạo ra toàn bộ các biểu tượng trong Photoshop. \Màu đơn giản điền QIcons trong Qt

Trả lời

12

Bạn có thể tạo QIcon từ QPixmap. QPixmap có thể được xây dựng với một kích thước nhất định, sau đó điền vào một màu bằng cách sử dụng 'điền'.

Ví dụ, để tạo ra một biểu tượng 100x100 đỏ:

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

Thao tác này sẽ điền chỉ những phần trong suốt của hình ảnh, phải không? Tôi có nghĩa là, điều này có thể được sử dụng để điền vào các phần trong suốt của một QIcon với màu sắc? – SexyBeast

+0

Tôi sợ tôi không hiểu. Mã này tạo ra một biểu tượng hoàn toàn mới là một hình vuông màu đỏ chắc chắn. – cgmb

5

Chỉ cần tìm ra cách để thay đổi màu sắc từ biểu tượng để bất kỳ màu nào khác. Do đó, hình ảnh của biểu tượng phải bao gồm một màu đồng nhất (ở đây: 'đen') có thể được chuyển đổi bằng cách sử dụng pixmap và khả năng che của nó thành màu khác (như 'đỏ'):

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

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

Cool, mặc dù createMaskFromColor (QColor ('transparent'), Qt.MaskInColor) hoạt động tốt hơn cho tôi – falkb

+0

Chủ đề được gắn thẻ với C++, nhưng đây không phải là mã C++ hợp lệ. Có muốn chỉnh sửa nó nhưng các nhà phê bình đã từ chối nó vì những lý do tôi không biết. Bên cạnh đó, giải pháp làm việc cho tôi sau khi chuyển nó sang C++. – bns

+0

Tôi nghĩ rằng bạn là đúng - Tôi không nhận ra rằng câu hỏi có liên quan đến C++ - nhưng tôi cũng nghĩ rằng nó không có nghĩa là để thay đổi một câu trả lời đã có rất nhiều ... Và tôi không biết nếu mã của bạn là ổn định - vì vậy tôi không thể chấp nhận nó cho bản thân mình. Tôi nghĩ, bạn nên tự trả lời! Cảm ơn gợi ý. – Henhuy

Các vấn đề liên quan