2012-01-17 87 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着色器來實現各種酷炫效果。