2012-01-17 281 views
5

我想使用QML实现模糊效果。 我找到了关于“效果:模糊”(Example)的引用,但在Qt 4.8中这不起作用。 据我所知,这是用C++代码实现的。但是如何?Qml和模糊图像

回答

13

effect属性(所有可见的QML项目都具有)接受QGraphicsEffect的所有子效果。 Qt 4.8随附QGraphicsBlurEffect,QGraphicsColorizeEffect,QGraphicsDropShadowEffectQGraphicsOpacityEffect。最初这些都是默认情况下在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

我不知道你在说什么,但是:Qt附带一个名为Shader Effects的示例。顾名思义,它使用QML中声明的GPU着色器来实现各种酷炫效果。