我想使用QML实现模糊效果。 我找到了关于“效果:模糊”(Example)的引用,但在Qt 4.8中这不起作用。 据我所知,这是用C ++代码实现的。但是如何?
答案 0 :(得分:13)
所有可视化QML项目都具有的effect
属性接受作为QGraphicsEffect
的子类的所有效果。 Qt 4.8附带QGraphicsBlurEffect
,QGraphicsColorizeEffect
,QGraphicsDropShadowEffect
和QGraphicsOpacityEffect
。最初这些都是默认的QML版本,但是在开发的同时(在QtQuick的第一次公开发布之前),由于性能原因,它们被排除在外。要使它们再次工作,必须在其应用程序的C ++部分中包含以下代码行,例如在main
函数中:
qmlRegisterType<QGraphicsBlurEffect>("Effects",1,0,"Blur");
qmlRegisterType<QGraphicsColorizeEffect>("Effects",1,0,"Colorize");
qmlRegisterType<QGraphicsDropShadowEffect>("Effects",1,0,"DropShadow");
qmlRegisterType<QGraphicsOpacityEffect>("Effects",1,0,"OpacityEffect");
这使得这些类可用于QML,因此可以使用它们:
import QtQuick 1.1
import Effects 1.0
Item {
// [...]
effect: Blur {
blurRadius: 10.0
}
}
这很有效,但在很多情况下,最终的表现确实是不可接受的。然后你应该尝试在ShaderEffectItem
的帮助下实现模糊。通过这种方式,可以使用GLSL着色器程序实现图形效果,从而实现GPU渲染,这比基于QGraphicsEffect
的旧方法更快。
答案 1 :(得分:1)
我不知道你在说什么,但是:Qt附带了一个名为Shader Effects的例子。顾名思义,它使用在QML中声明的GPU着色器来实现各种很酷的效果。