删除 QTableWidget 单元格中的 space

remove space in QTableWidget cell

我想将 QLineEditQLable 放入 QTableWidget 中的同一个单元格。这个单元格小部件创建了我从互联网修改的下面的代码。

class HiddenLabel(QLabel):
    '''
    QLable hide when mouse pressed
    '''
    def __init__(self, buddy, taskline, parent = None):
        super(HiddenLabel, self).__init__(parent)
        self.setFixedHeight(30)
        self.buddy = buddy
        self.taskline = taskline

    # When it's clicked, hide itself and show its buddy
    def mousePressEvent(self, event):
        # left click to edit 
        if event.button() == QtCore.Qt.LeftButton:
            self.hide()
            self.buddy.setText(self.taskline.plain_text)
            self.buddy.show()
            self.buddy.setFocus() # Set focus on buddy so user doesn't have to click again



class EditableCell(QWidget):
    '''
    QLineEdit show when HiddenLabel is hidden
    '''
    def __init__(self, taskline, parent = None):
        super(EditableCell, self).__init__(parent)
        self.taskline = taskline
        # Create ui
        self.myEdit = QLineEdit()
        self.myEdit.setFixedHeight(30)
        self.myEdit.hide() # Hide line edit
        self.myEdit.editingFinished.connect(self.textEdited)
        # Create our custom label, and assign myEdit as its buddy
        self.myLabel = HiddenLabel(self.myEdit, self.taskline) 
        self.myLabel.setText(self.taskline.enrich_text())
        # Change vertical size policy so they both match and you don't get popping when switching
        #self.myLabel.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) 

        # Put them under a layout together
        hLayout = QHBoxLayout()
        hLayout.addWidget(self.myLabel)
        hLayout.addWidget(self.myEdit)
        self.setLayout(hLayout)

    def textEdited(self):
        # If the input is left empty, revert back to the label showing
        print('edit finished')
        print(self.myEdit.text())
        taskline = TaskLine()
        taskline.parser(self.myEdit.text())
        self.taskline = taskline
        self.myLabel.setText(taskline.enrich_text())
        self.myEdit.hide()
        self.myLabel.show()

单击鼠标左键,单元格将在 QLineEditQLabel 之间切换。
如屏幕截图所示,我想删除单元格边框和单元格小部件之间的空白 space。

我觉得可以通过样式设置来调整,但是没找到Qt样式设置有用的文档。希望有人能给点用

您必须将布局边距设置为 0:

hLayout.setContentsMargins(0, 0, 0, 0)

因为 the docs 指出它们取决于样式和平台:

void QLayout::setContentsMargins(int left, int top, int right, int bottom)

Sets the left, top, right, and bottom margins to use around the layout.

By default, QLayout uses the values provided by the style. On most platforms, the margin is 11 pixels in all directions.