Qt中,如何防止父窗口的透明属性影响子窗口

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

我正在使用Qt/C++进行程序开发。

我用

setAttribute(Qt::WA_TranslucentBackground);
来实现窗口的透明。

但是,所有子窗口的背景也都变成透明了。

我希望其中一个子窗口的背景是不透明的,但其他子窗口继承此属性。

如何隔离父窗口这个属性对其的影响?

setStyleSheet();
不起作用。

c++ windows qt
1个回答
0
投票

您可以创建子窗口而不告诉它父窗口,这样Qt会将子窗口视为它自己的单独窗口,因此,它不会对其应用透明度。

像这样:

childWindow = new ChildWindow();

对于 PyQt5:

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QWidget
from PyQt5.QtCore import Qt

# Class for child window
class ChildWindow(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        # Call setGeometry method
        self.setGeometry(100, 100, 200, 200)
        # Call setWindowTitle method
        self.setWindowTitle("Child Window")

         # Add some widgets
        self.button = QPushButton('Child Button.', self)
        self.button.setGeometry(100, 100, 100, 30)


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.resize(400, 400)

        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_TranslucentBackground)

        self.child_window = ChildWindow()
        self.child_window.show()

        self.button = QPushButton('Open Child Window', self)
        self.button.setGeometry(100, 100, 200, 30)

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())
© www.soinside.com 2019 - 2024. All rights reserved.