用Qt获得类似iOS7的模糊效果

Posted

技术标签:

【中文标题】用Qt获得类似iOS7的模糊效果【英文标题】:Obtain iOS7-like blur effect with Qt 【发布时间】:2013-11-09 22:30:51 【问题描述】:

我在问自己如何才能获得类似 ios 7 的模糊/透明效果。像这样的:

(来源:ilounge.com)

我想将此应用于整个 QDialog。我知道如何获得良好的透明度,但不知道如何获得这种模糊。

有人可以帮忙吗?

非常感谢!

【问题讨论】:

忘记 QtWidgets。为此,您需要 QML。 你有这方面的例子吗?顺便说一句,我认为使用 Qt 的 C++ 方法是完全可行的,这是我的目标。 【参考方案1】:

基本上,您需要先获取桌面的屏幕截图。然后你需要模糊它。然后可能将图像保存到硬盘驱动器。然后您需要将其设置为对话框的背景。

然后你需要让每个按钮的背景也透明。

如果你使用QGraphicsViewOpenGL,最后三个步骤可能会有很大的不同。

http://qt-project.org/doc/qt-5.0/qtgui/qscreen.html#grabWindow

http://qt-project.org/doc/qt-5.0/qtwidgets/desktop-screenshot.html

实际抓取屏幕的代码行数:

QScreen *screen = QGuiApplication::primaryScreen();
if (screen)
    originalPixmap = screen->grabWindow(0);

在 Qt 4.8 中,它曾经是这样完成的:

http://qt-project.org/doc/qt-5.0/qtgui/qpixmap.html#grabWindow

要模糊屏幕截图,请使用:

http://doc-snapshot.qt-project.org/4.8/qgraphicsblureffect.html

您可能需要将其保存到硬盘驱动器以便 QStylesheets 能够找到它。

要设置背景图片,请尝试以下操作:

http://qt-project.org/doc/qt-5.0/qtwidgets/stylesheet-reference.html#background-image-prop

如何设置样式表的示例:

qApp->setStyleSheet("QLineEdit  background-color: yellow ");

http://qt-project.org/doc/qt-4.8/stylesheet-examples.html

http://qt-project.org/forums/viewthread/1397

希望对您有所帮助。

【讨论】:

绝对不需要在硬盘上保存任何东西,也不需要使用样式表。您可以使用自定义的 QDialogQWidget 派生类,根据需要绘制其背景,然后将透明背景小部件与您想要的控件放在其上。 很快,我会看看我是否可以根据您的建议拼凑一个工作示例,@KubaOber。谢谢!【参考方案2】:

非常感谢您的帮助 phyatt,我成功了。虽然我的代码有效,但结果不如 iOS 漂亮:

iOS7-like blur with Qt

不过,我会在我的网站上发布整个代码,我稍后会在此处发布链接。

敬请期待!

[编辑] 这是详细操作方法的链接:iOS7 like blur effect with QT

【讨论】:

以上是关于用Qt获得类似iOS7的模糊效果的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS7 中创建模糊效果

转css3实现ios7“毛玻璃”模糊效果

如何在 iOS6 中的 UIView 上获得高斯模糊效果

iOS 7 导航栏背景模糊效果在 iPhone 4 中不起作用

如何在 iOS 7 中将用户背景添加到具有模糊效果的应用程序中?

iOS 7 对 videoPlayer 的模糊效果