Potrzebuję stworzyć menu, które zmienia tło QWidget. Chciałbym umieścić QIcon reprezentujący wybrany kolor w QActions, które zapełnia QMenu. Nie chciałbym wyskakiwać z Photoshopa i malować ikon ręcznie. Czy można zaprogramować prostą ikonę wypełnioną określonym kolorem? W ten sposób mogę mieć dowolną liczbę QActions w razie potrzeby i nie będę musiał tworzyć całej garści ikon w Photoshopie. \Proste wypełnianie kolorem QIcons w Qt
Odpowiedz
Możesz skonstruować QIcon z QPixmap. QPixmap może być skonstruowany przy danym rozmiarze, a następnie wypełniony kolorem za pomocą "wypełnienia".
Na przykład aby stworzyć czerwony 100x100 ikonę:
QPixmap pixmap(100,100);
pixmap.fill(QColor("red"));
QIcon redIcon(pixmap);
Tylko zorientowali się, jak zmienić kolor z ikoną do jakiegokolwiek innego koloru. Dlatego obraz ikony musi składać się z jednego koloru ciało stałe (tutaj: „czerni”), które mogą być przekształcane za pomocą pixmapę i jego zdolność maskowania, w innym kolorze (na przykład „Red”):
pixmap = QPixmap(filename)
mask = pixmap.createMaskFromColor(QColor('black'), Qt.MaskOutColor)
pixmap.fill((QColor('red')))
pixmap.setMask(mask)
btNew = QToolButton()
btNew.setIcon(QIcon(pixmap))
Cool, choć createMaskFromColor (QColor ("przezroczysty"), Qt.MaskInColor) działa lepiej dla mnie – falkb
Temat jest oznaczony C++, ale nie jest to poprawny kod C++. Chciałbym go edytować, ale recenzenci odrzucili go z powodów, których nie znam. Poza tym rozwiązanie działało dla mnie po przeniesieniu go do C++. – bns
Myślę, że masz rację - nie rozpoznałem, że pytanie było związane z C++ - ale uważam też, że nie ma to na celu zmiany już istniejącej odpowiedzi, która ... I nie wiem, czy twój kod jest stabilny - więc nie mogę tego zaakceptować dla siebie. Myślę, że powinieneś odpowiedzieć sobie! Dzięki za podpowiedź. – Henhuy
to wypełnią tylko przezroczyste części obrazu, prawda? Czy można to wykorzystać do wypełnienia przezroczystych części QIcon kolorem? – SexyBeast
Obawiam się, że nie rozumiem. Ten kod tworzy zupełnie nową ikonę, która jest solidnym czerwonym kwadratem. – cgmb