我正在尝试创建一个存在一行的布局,并且该行应包含一个绝对定位的按钮,应将其放置在该行的外部。
这是简单的架构
我只是通过将一个子按钮推到父按钮(我不确定这是正确的解决方案)并将其移动到某个绝对坐标来做到这一点。
它可以工作,但是不幸的是,子按钮被父按钮裁剪。就像CSS中的overflow: hidden
。但是在QT的情况下,我找不到如何禁用此行为。
这是我当前的QUI的演示
有什么办法可以解决?还是我应该只将一些小部件与空的垫片等一起使用?
btn = QPushButton("button")
test = QPushButton("X")
test.setParent(btn)
test.move(200, 5)
self.layout.addWidget(btn)
UI类的完整代码(最小的可复制示例)
class MainWindow(QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.layout = QVBoxLayout()
btn = QPushButton("button")
test = QPushButton("X")
test.setParent(btn)
test.move(200, 5)
self.layout.addWidget(btn)
self.setLayout(self.layout)
self.layout.setContentsMargins(0,0,0,74)
self.layout.setSpacing(0)
# self.layout.addStretch(-1)
self.setMinimumSize(640,400)
self.setWindowFlags(Qt.FramelessWindowHint)
答案 0 :(得分:1)
对不起,@ Heike的建议绝对正确,您不应寻找错误的解决方案。
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class MainWindow(QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.setMinimumSize(640,400)
self.setWindowFlags(Qt.FramelessWindowHint)
btn = QPushButton("button")
test = QPushButton("X")
test.setParent(btn)
# test.move(200, 5)
# self.layout = QVBoxLayout()
self.layout = QGridLayout()
self.layout.addWidget(btn, 0, 0, 1, 10)
self.layout.addWidget(test, 0, 11, 1, 1)
self.layout.setContentsMargins(0,0,0,74)
self.layout.setSpacing(0)
self.setLayout(self.layout)
if __name__ == '__main__':
import sys
application = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(application.exec_())