我想使用 QML 实现模糊效果。 我找到了有关“效果:模糊”的引用文献(Example)但在 Qt 4.8 中这不起作用。 据我所知这是用C++代码实现的。但如何呢?
最佳答案
所有可视 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 的方法要快得多。
关于qt - Qml 和模糊图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8894244/