Tôi đang cố triển khai một cái gì đó như "biểu tượng được soạn" trong Qt.QIcon tùy chỉnh sử dụng QIconEngine và độ trong suốt
Mục tiêu: Tôi cần động lực đặt màu chỉ cho phần biểu tượng.
Ý tưởng của tôi: Soạn biểu tượng này bằng hai cách khác. Một biểu tượng sẽ được tô màu như mong muốn (có thể bằng ColorizeEffect) và trộn nó dưới biểu tượng thứ hai hoạt động như lớp lớp phủ.
Vấn đề: tôi đã cố gắng QIconEngine và thực hiện các phương pháp sơn của nó. ColorizeEffect dường như không hoạt động (ngay cả khi tôi thử hack với QLabel tạm thời cho điều đó - khi sức mạnh được thiết lập> 0.0, QIcon được hình thành bởi nó trống). Nhưng đó không phải là vấn đề chính. Vấn đề là, dù tôi có làm gì đi nữa, tôi vẫn nhận được một số màu nền mặc định cho biểu tượng "sáng tác" này.
Dưới đây là đoạn mã của tôi:
class QComposedIconEngine: public QIconEngine
{
public:
QComposedIconEngine();
~QComposedIconEngine();
virtual void paint (QPainter * painter, const QRect & rect, QIcon::Mode mode, QIcon::State state);
virtual QIconEngine * clone(void) const;
public:
QIcon m_qIconA;
QIcon m_qIconB;
QColor m_qColor;
};
Và đây là thực hiện của tôi về sơn (...):
void CLxQComposedIconEngine::paint (QPainter * painter, const QRect & rect, QIcon::Mode mode, QIcon::State state)
{
QBrush brush = painter->background();
QColor color = brush.color();
brush.setColor(Qt::transparent);
painter->setBackground(brush);
painter->eraseRect(rect);
painter->setCompositionMode(QPainter::CompositionMode_SourceOver);
m_qIconA.paint(painter, rect, Qt::AlignCenter, mode, state);
};
Và đây là cách tôi tạo biểu tượng "Đã soạn":
QComposedIconEngine * qIconEngine = new QComposedIconEngine();
QIcon i1;
QIcon i2;
i1.addPixmap(...);
i2.addPixmap(...);
qIconEngine->m_qIconA = i1;
qIconEngine->m_qIconB = i2;
QIcon i3(qIconEngine);
Tôi mong đợi i1 và i3 trông giống hệt nhau. Và bên cạnh nền tảng chết tiệt nó thực sự là. Nhưng tôi cần phải minh bạch.
(ngay cả khi tôi rời khỏi phương pháp sơn của tôi (...) rỗng, nền chết tiệt là có!)
Có ai biết làm thế nào để làm cho nền trong suốt? Cảm ơn.
Tài liệu của QIconEngine cho biết "sử dụng QIconEngineV2". Bạn đã thử chưa –
Tất nhiên. Không có hiệu lực. Fortunatelly Tôi giải quyết vấn đề này. Đó là cách QIconEngine được gọi từ bên ngoài. Tôi sẽ tự mình biên dịch câu trả lời ... :-) – GPUquant