好吧……其实这个方法并不是什么新东西,简直是老到家的了……
不过因为需要绘制可以在任意背景上半透明的
图片,我搜索过,然而却
没有任何结果……于是最终研究出了Qt的帮助文档中都已经注明了的十分“昂贵”的半透明方法……
于是实现代码
- // 继承QGraphicsPixmapItem, 并重载了其中的paint函数。
- void GraphicsAlphaPixmapItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
- {
- if (m_iAlpha >= 0 && m_iAlpha < 255)
- {
- QPixmap _temp(pixmap()); // 生成一个临时图片
- QPixmap _alpha(_temp.size()); // 生成图片对应的空的alpha通道
- _alpha.fill(QColor(m_iAlpha, m_iAlpha, m_iAlpha)); // 设定alpha值(0为完全透明, 255为完全不透明)
- _temp.setAlphaChannel(_alpha); // 设置alpha通道
- painter->drawPixmap(_temp.rect(), _temp); // 绘制……
- }
- else
- {
- painter->drawPixmap(pixmap().rect(), pixmap()); // alpha值错误或者为255时直接绘制原图
- }
- }
然后,占地求如何为QGraphicsTextItem内的
文字加上描边效果(例如为了可以在有着黑色区域的图片上方
显示黑色的文字之类的……或者有什么替代方案也可……)