我正在使用Qt/C++进行程序开发。
我用
setAttribute(Qt::WA_TranslucentBackground);
来实现窗口的透明。
但是,所有子窗口的背景也都变成透明了。
我希望其中一个子窗口的背景是不透明的,但其他子窗口继承此属性。
如何隔离父窗口这个属性对其的影响?
setStyleSheet();
不起作用。
您可以创建子窗口而不告诉它父窗口,这样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_())