在 QGroupBox 的顶角放置一个按钮

Putting a button in the top corner of a QGroupBox

我有以下QGroupBox:

我想在右上角添加一个按钮,如下所示:

这样用户就可以删除QGroupBox了。这可能吗?如果没有,我可以使用哪些替代选项?

下面的代码做了类似的事情,不是直接在分组框的边框上绘制。

import sys
from PyQt4 import QtGui
from PyQt4 import QtCore

class GROUPBOX (QtGui.QWidget):

    def __init__(self):
        super(GROUPBOX, self).__init__()        
        self.initUI()        

    def initUI(self):        
        self.pushButton = QtGui.QPushButton(self)
        self.pushButton.setGeometry(QtCore.QRect(480, 10, 50, 20))
        self.pushButton.setObjectName ('pushButton')        
        self.pushButton.setText ('Delete') 
        self.pushButton.clicked.connect (self.delete)
        self.createGroupBox ()       
        self.resize(586, 335)
        self.show()   

    def createGroupBox (self) :
        self.groupBox = QtGui.QGroupBox(self)
        self.groupBox.setGeometry(QtCore.QRect(25, 25, 500, 300))        
        self.groupBox.setObjectName ('groupBox')
        self.groupBox.setTitle ('Group Box') 
        self.groupBox.show () 

    def delete (self) :        
        currentGroupBox     = self.findChildren (QtGui.QGroupBox) 
        if currentGroupBox :
            for eachGroupBox in currentGroupBox :
                eachGroupBox.deleteLater()
            self.pushButton.setText ('Create')
        else :
            self.createGroupBox ()
            self.pushButton.setText ('Delete')             

def main():

    app = QtGui.QApplication(sys.argv)
    ex = GROUPBOX()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

我想出了如何使用 QCheckBox 实现非常接近我想要的东西:

没有悬停:

悬停:

我通过如下重新设计 QCheckBox 来做到这一点:

import sys
from PySide import QtGui, QtCore

class DeleteButtonExample(QtGui.QWidget):

    def __init__(self):
        super(DeleteButtonExample, self).__init__()

        delete_gb = QtGui.QGroupBox('QGroupBox with Delete Button')
        group_box_vbl = QtGui.QVBoxLayout()
        group_box_vbl.setAlignment(QtCore.Qt.AlignTop)
        group_box_vbl.addSpacing(-14)
        delete_button_hbl = QtGui.QHBoxLayout()
        delete_button_cb = QtGui.QCheckBox()
        delete_button_cb.clicked.connect(self.delete_event)     
        delete_button_cb.setStyleSheet('QCheckBox::indicator:hover {image: url(del_btn_hover.png);}'
                                       'QCheckBox::indicator:!hover {image: url(del_btn_no_hover.png);}')
        delete_button_hbl.setAlignment(QtCore.Qt.AlignRight)
        delete_button_hbl.addWidget(delete_button_cb)
        delete_button_hbl.addSpacing(-13)
        group_box_vbl.addLayout(delete_button_hbl)
        delete_gb.setLayout(group_box_vbl)

        window_vbl = QtGui.QVBoxLayout()
        window_vbl.addWidget(delete_gb)
        self.setLayout(window_vbl)

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('QGroupBox with Delete Button')
        self.show()

    # @QtCore.Slot()
    def delete_event(self):
        msg = "Define the code to delete the QGroupBox here!"
        QtGui.QMessageBox().information(self, "Trying to delete the QGroupBox", msg)


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    example = DeleteButtonExample()
    sys.exit(app.exec_())

这导致

以及两个图标(悬停和非悬停)所在的位置: