声明式alpha转换器
declarative alpha changer
我想写一个QDeclarativeItem
FadeEdges
,我从QML
实例化,如在这个例子中:
FadeEdges {
Text {
id: sometext
text: "some text"
}
}
在sometext
重绘之后,我想减少它在边缘绘制的像素的alpha(从完全不透明到透明)。所以它的渲染边缘将会褪色。我的问题是,如果有的话,有什么机制可以在子alpha值中进行这种更改。
我已经尝试安装事件过滤器并设置setFiltersChildEvents()
。未发送PaintEvent
s
这不是我自己问题的确切答案,但我想它可以作为初学者。只有QGraphicsEffect::draw
成员函数需要被重写(margins_
是QMargins
成员变量):
void FadeEdgesEffect::draw(QPainter* painter)
{
QLinearGradient lg;
lg.setColorAt(qreal(0), QColor(0, 0, 0, 0));
lg.setColorAt(qreal(1), QColor(0, 0, 0, 255));
qreal const width(boundingRect().width());
qreal const height(boundingRect().height());
QPoint offset;
QPixmap pixmap(sourcePixmap(Qt::LogicalCoordinates, &offset));
{
QPainter p(&pixmap);
p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
if (margins_.left())
{
lg.setStart(qreal(0), qreal(0));
lg.setFinalStop(margins_.left(), qreal(0));
p.fillRect(QRectF(0, 0, margins_.left(), height), lg);
}
// else do nothing
if (margins_.right())
{
lg.setStart(qreal(width), qreal(0));
lg.setFinalStop(width - margins_.right(), qreal(0));
p.fillRect(QRectF(width - margins_.right(),
0, margins_.right(), height), lg);
}
// else do nothing
if (margins_.bottom())
{
lg.setStart(qreal(0), height);
lg.setFinalStop(qreal(0), height - margins_.top());
p.fillRect(QRectF(0, height - margins_.bottom(),
width, margins_.bottom()), lg);
}
// else do nothing
if (margins_.top())
{
lg.setStart(qreal(0), qreal(0));
lg.setFinalStop(0, margins_.top());
p.fillRect(QRectF(0, 0, width, margins_.top()), lg);
}
// else do nothing
}
painter->drawPixmap(offset, pixmap);
}
相关文章:
- 转换器练习:跳过 if 语句和 if 语句
- 使用转换器提升 Python 问题 - 静态链接
- 我写的 ASCII 到二进制转换器C++向后显示二进制,如何使其正确显示?
- 十进制到二进制转换器 c++
- 用于 boost::p roperty_tree 的通用枚举转换器
- 为什么我的C++基转换器中出现分段错误?
- 将字节数组转换为对象C++ |C++中的 C# 位转换器
- 英语到摩尔斯电码转换器
- 我用c++做了一个转换器,把英里转换成公里,把公里转换成英里,把赛尔修斯转换成法赫伦海特,把法赫伦海特转换成赛尔修斯
- 使用 Json 转换器反序列化 WCF 服务中的C++字符串
- 十进制,包括负到 32 位二进制转换器
- 标准::映射转换器模板
- 英里到千克转换器练习的小语法错误
- 句子转换器在存在新行的情况下不起作用
- 在C Windows程序中获取A/D转换器示例程序
- ROS中未定义的参考误差到OpenCV图像转换器
- 表达式到C++类类型转换器/类型转换
- 这里怎么了?单位转换器
- 华氏度到摄氏转换器C
- 声明式alpha转换器