Qt Designer заставляет виджет перекрывать другой виджет в макете - PullRequest
0 голосов
/ 21 января 2020

Я хочу сделать 3 кнопки окна, как на картинке выше (аналог Google Chrome), используя Qt Designer и PyQt.

Я хочу, чтобы 3 кнопки перекрывали правую часть TabWidget. Но я могу перекрывать кнопку только на TabWidget, когда разбиваем макет, как на картинке.

Когда я устанавливаю любой макет, каждый виджет не может перекрывать друг друга. Так можно ли перекрывать друг друга при установке макета? Спасибо.

Это макет, который я хочу

Он похож на макет Google Chrome

1 Ответ

1 голос
/ 21 января 2020

Это не может быть сделано в создателе / ​​конструкторе, и может быть достигнуто только с помощью setCornerWidget() из вашего кода.

Поскольку для каждого угла можно установить только один виджет, у вас есть чтобы создать QWidget, который действует как контейнер, затем добавьте к нему кнопки.

corner widget example

class Test(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        # ...

        self.createButtons()

    def createButtons(self):
        # create the container and its layout
        self.buttonContainer = QtWidgets.QWidget()
        buttonLayout = QtWidgets.QHBoxLayout(self.buttonContainer)

        # remove margins around the layout and set a minimal spacing between
        # the children widgets
        buttonLayout.setContentsMargins(0, 0, 0, 0)
        buttonLayout.setSpacing(1)

        # QToolButtons are usually better for this, as QPushButtons tend
        # to expand themselves
        self.minimizeButton = QtWidgets.QToolButton(text='_')
        self.maximizeButton = QtWidgets.QToolButton(text='o')
        self.closeButton = QtWidgets.QToolButton(text='x')
        buttonLayout.addWidget(self.minimizeButton)
        buttonLayout.addWidget(self.maximizeButton)
        buttonLayout.addWidget(self.closeButton)

        # set the container as the corner widget; as the docs explain,
        # despite using "TopRightCorner", only the horizontal element (right
        # in this case) will be used 
        self.tabWidget.setCornerWidget(
            self.buttonContainer, QtCore.Qt.TopRightCorner)
...