Вы можете использовать QPainter
's compositionMode
свойство, чтобы сделать что-то вроде этого довольно легко, без необходимости читать цвета исходного пикселя.
Простой образец QWidget
с пользовательской реализацией paintEvent
, которую вы должны быть в состоянии адаптировать к методу paint
вашего элемента:
#include <QtGui>
class W: public QWidget {
Q_OBJECT
public:
W(QWidget *parent = 0): QWidget(parent) {};
protected:
void paintEvent(QPaintEvent *) {
QPainter p(this);
// Draw boring background
p.setPen(Qt::NoPen);
p.setBrush(QColor(0,255,0));
p.drawRect(0, 0, 30, 90);
p.setBrush(QColor(255,0,0));
p.drawRect(30, 0, 30, 90);
p.setBrush(QColor(0,0,255));
p.drawRect(60, 0, 30, 90);
// This is the important part you'll want to play with
p.setCompositionMode(QPainter::RasterOp_SourceAndNotDestination);
QPen inverter(Qt::white);
inverter.setWidth(10);
p.setPen(inverter);
p.drawLine(0, 0, 90, 90);
}
};
Это выведет что-то вроде следующего изображения:
![Fat inverted line over funky colors](https://i.stack.imgur.com/2viKH.png)
Поэкспериментируйте с другими режимами композиции , чтобы получить более интересные эффекты.