Запрет отсечения родительского виджета с абсолютным позиционированием родительским виджетом - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь создать макет, в котором существует строка, и эта строка должна содержать кнопку с абсолютным позиционированием, которая должна располагаться за пределами этой строки.

Вот простая схема

enter image description here

Я сделал это, просто нажав дочернюю кнопку на родительскую кнопку (я не уверен, что это правильное решение), и переместил ее в некоторые абсолютные координаты. Это работает, но, к сожалению, дочерняя кнопка обрезается родителем. Так что это похоже на overflow: hidden в CSS. Но в случае QT я не мог найти, как отключить это поведение.

Вот демонстрация моего текущего QUI

enter image description here

Существует ли какой-нибудь способ решить это? Или я должен просто использовать некоторую комбинацию виджетов с пустой прокладкой и т. Д .?

    btn = QPushButton("button")

    test = QPushButton("X")
    test.setParent(btn)
    test.move(200, 5)

    self.layout.addWidget(btn)

Полный код класса пользовательского интерфейса (минимальный воспроизводимый пример)

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)

1 Ответ

1 голос
/ 29 июня 2019

Извините, но советы @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_()) 

enter image description here

...