操纵 Qt 表格单元格间距

Posted

技术标签:

【中文标题】操纵 Qt 表格单元格间距【英文标题】:Manipulating Qt table cell spacing 【发布时间】:2013-10-30 00:30:12 【问题描述】:

我正在寻找一种方法来从QTableWidget 单元格中挤出所有可能的空间。我粘贴了一些代码来演示我在下面尝试过的事情,并且我上传了在 OSX 10.8.5、Qt 4.8.4、PySide 1.2.1 上生成的屏幕截图。我想要的是能够设置valueIWantToBeZero = 0 以便单元格恰好 是单个字符的大小,并且我可以将尽可能多的列打包到可用空间中。如果我在此示例中设置valueIWantToBeZero = 0,则文本会从单元格的右侧消失。每个单元格的左侧似乎有大约 5 个像素的填充,我无法摆脱。顶部似乎也有 1 个像素,底部有 2 个像素,但我不太关心垂直间距。

如何使单元格与一个字符的宽度完全一致?

感谢您的建议! :-)

#! /usr/bin/env python
import sys
from PySide import QtCore, QtGui

class TableWidget(QtGui.QTableWidget):
   def __init__(self, parent):
      super(TableWidget, self).__init__(parent)
      font = QtGui.QFont("Courier",12,QtGui.QFont.Normal)
      font.setKerning(False)
      font.setLetterSpacing(QtGui.QFont.PercentageSpacing,0.0)
      font.setHintingPreference(QtGui.QFont.PreferNoHinting)
      font.setWordSpacing(0.0)
      self.setFont(font)

      self.setStyleSheet("QHeaderView::section:horizontal margin: 0px;  border: 0; padding 0px")
      self.setStyleSheet("QTableView::item padding: 0px; margin: 0px; border: 0; background-color: orange; ")

      valueIWantToBeZero = 5
      hheader = self.horizontalHeader()
      hheader.setFont(font)
      hheader.setDefaultSectionSize(hheader.fontMetrics().width("A")+valueIWantToBeZero)
      vheader = self.verticalHeader()
      vheader.setDefaultSectionSize(vheader.fontMetrics().height())

      dim = 10
      self.setColumnCount(dim)
      self.setRowCount(dim)
      for r in range(dim):
         for c in range(dim):
            item = QtGui.QTableWidgetItem(str(r))
            self.setItem(r,c,item)

def main():
   app = QtGui.QApplication(sys.argv)
   window = QtGui.QWidget()
   window.setGeometry(100,100,200,200)
   tw = TableWidget(window)
   twLayout = QtGui.QVBoxLayout()
   twLayout.addWidget(tw)
   window.setLayout(twLayout)

   window.show()
   sys.exit(app.exec_())

if __name__ == '__main__':
   main()

【问题讨论】:

【参考方案1】:

我最终使用QGraphicsScene 将单元格和网格线精确地绘制在我想要的位置,所以这是这个问题的一个可能答案。话虽如此,我仍然怀疑有一种方法可以控制QTableWidget 的所有边距,但这个版本的 Qt 可能没有?

【讨论】:

以上是关于操纵 Qt 表格单元格间距的主要内容,如果未能解决你的问题,请参考以下文章

Css中控制table单元格的间距

html表格单元格间距设不了是为啥

在单个 LaTeX 表格的单元格中添加自定义左侧间距

html中单元格间距与单元格边距的区别

删除表格单元格和行之间的间距

前端入门HTML基础元素3,表格