FastBlur可以模糊其背后的所有内容吗?

问题描述 投票:0回答:1

我有此代码,qml

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12
import QtGraphicalEffects 1.0
ApplicationWindow {
    property var theme: String("#ffffff")
    property var focusColor: String('transparent')
    id: applicationWindow
    visible: false                                      
    width: 600
    height:600
    Image {
        id: image_bug
        anchors.fill: parent
        source: "im.png"                                
    }   
    Rectangle {
    width: 100; height: 600
    color: "green"
   Text {
    id: helloText
    text: "Hello world!"
    anchors.verticalCenter: parent.verticalCenter
    anchors.horizontalCenter: parent.horizontalCenter
    font.pointSize: 10; font.bold: true
}
    MouseArea {
        anchors.fill: parent
        onClicked: { effectSource.width = 1200; effectSource.height = 1200;}
    }
}
    ShaderEffectSource {
        id: effectSource
        sourceItem: image_bug
        anchors.centerIn: image_bug
        width: 300 
        height: 300 
        sourceRect: Qt.rect(x,y, width, height)
    }
    FastBlur{
        id: blur
        anchors.fill: effectSource
        source: effectSource
        radius: 100
    }
}

PyQT5或Pyside2

import sys
import os                                                            # +++
from PyQt5.QtCore import Qt, QUrl
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QVBoxLayout, QLabel
from PyQt5.QtQml import QQmlApplicationEngine
from PyQt5.QtCore import (QCoreApplication, QMetaObject, QObject, QPoint,
    QRect, QSize, QUrl, Qt)
    '''
    from PySide2.QtCore import Qt, QUrl
    from PySide2.QtWidgets import QApplication, QWidget, QMainWindow, QVBoxLayout, QLabel
    from PySide2.QtQml import QQmlApplicationEngine
    from PySide2.QtCore import (QCoreApplication, QMetaObject, QObject, QPoint,
        QRect, QSize, QUrl, Qt)
    '''
DIR_PATH = os.path.dirname(os.path.realpath(__file__))
class GUI_MainWindow(QMainWindow):
    def __init__(self, widget, parent=None):
        QMainWindow.__init__(self, parent)
        self.setWindowTitle('GUI_MainWindow')
        self.resize(600, 600)
        self.widget = widget
        centralWidget = QWidget()
        self.setCentralWidget(centralWidget)    
        self.widget_test_2 = QLabel("<h1>Hello World !</h1>", alignment=Qt.AlignCenter)
        self.widget_test_2.setObjectName(u"widget_test_2")
        self.widget_test_2.setGeometry(QRect(180, 40, 151, 181))
        self.widget_test_2.raise_()
        layout = QVBoxLayout(centralWidget)
        layout.addWidget(self.widget_test_2)
        layout.addWidget(self.widget, stretch=1)#blur box
if __name__ == "__main__":
    myApp = QApplication(sys.argv)
    file = os.path.join(DIR_PATH, "qml_window.qml")                     
    url = QUrl.fromLocalFile(file)                                      
    engine = QQmlApplicationEngine()
    context = engine.rootContext()
    context.setContextProperty("main", engine)
    engine.load(url)
    if not engine.rootObjects():
        sys.exit(-1)
    widget = QWidget.createWindowContainer(engine.rootObjects()[0])
    window = GUI_MainWindow(widget)
    window.show()

    sys.exit(myApp.exec_())     

并且我希望ShaderEffectSource可以模糊其背后的所有内容,

甚至是由PyQt5或PySide2创建的小部件。在移动或停留时

小部件后面的所有内容都应该是模糊的。

我已经尝试过使用QGraphicsBlurEffect效果,但这没有给我想要的结果。我希望FastBlur可以做到。如果还有其他选择,请告诉我

我可以吗?

“

python qt pyqt5 pyside2 qt-quick
1个回答
0
投票

我正在更新此答案,因为问题已在评论中部分清除,但是我将在最后保留原始答案,因为它可能仍然有用。

© www.soinside.com 2019 - 2024. All rights reserved.