qt - Qml 和模糊图像

标签 qt qml

我想使用 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/

相关文章:

javascript - 当 JS 代码在应用程序构建时未知时从 QML 调用 JS 函数(帽子提示 SpiderMonkey)

c++ - 在 Qt 5.6 中休眠

android - 已安装 Google Play 服务,但文件夹 google_play_services_lib 不存在

c++ - QMainWindow::splitDockWidget 的 QDockWidget 拉伸(stretch)因子?

javascript - QML Javascript "console.log"与 UTF-8

javascript - 数学序列创建绑定(bind)循环

c++ - Qt5 - 如何在无框窗口中指定一些可拖动区域?

python - 如何使用自定义 python 类型参数发出 PySide 信号?

javascript - QML:StackView 和替换

c++ - QML 访问不可调用函数