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

时间:2013-11-09 22:30:51

标签: ios qt blur qdialog

我问自己如何获得iOS 7的模糊/透明效果。像这样:

Blur effect on iOS7 http://assets.ilounge.com/images/articles_ios7/controlcenter/1.jpg

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

有人可以帮忙吗?

非常感谢!

2 个答案:

答案 0 :(得分:5)

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

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

如果您使用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

希望有所帮助。

答案 1 :(得分:1)

非常感谢你的帮助,我成功了。虽然我的代码有效,但结果并不像iOS'那样漂亮:

iOS7-like blur with Qt

但是,我要在我的网站上发布整个代码,我会在这里发布链接。

敬请关注!

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