使用Qt实现类似iOS7的模糊效果

3
我在思考如何获得类似iOS7的模糊/透明效果。就像这样:
Blur effect on iOS7
(来源:ilounge.com)
我想将其应用于整个QDialog。我知道如何获得漂亮的透明效果,但不知道如何获得这种模糊效果。
有人能帮忙吗?
非常感谢!

不要使用QtWidgets,你需要使用QML。 - peppe
你有这方面的例子吗? 顺便说一下,我认为使用Qt的C++方法完全可行,这是我的目标。 - X99
2个回答

5
基本上,你需要先获取桌面的截图。然后需要将其模糊处理。然后可能需要将图像保存到硬盘中。然后需要将其设置为对话框的背景。
然后你还需要将每个按钮的背景也设置为透明。
如果您使用QGraphicsView或OpenGL,则最后三个步骤可能会有所不同。

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 派生类,按照您的意愿绘制其背景,然后在其上方放置一个带有所需控件的透明背景小部件。 - Kuba hasn't forgotten Monica
很快,我会看看能否根据你的建议组合出一个可行的示例,@KubaOber。谢谢! - phyatt

1
非常感谢您的帮助,phyatt。我成功了。虽然我的代码可以运行,但结果不如iOS的漂亮。 iOS7-like blur with Qt 不过,我打算在我的网站上发布整个代码,稍后会在这里发布链接。
请保持关注!
[编辑] 这里是详细教程的链接: iOS7 like blur effect with QT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接