PyQt4新手:QColumnView使用自定义模型自动设置列宽

时间:2012-09-25 17:16:44

标签: python qt4 pyqt pyqt4

我是Qt4的新手,但我似乎无法在手册或网上找到我需要的信息:

我实现了一个非常简单的数据模型,data()方法响应DisplayRole,ToolTipRole和DecorationRole输入。我还没有实现一个headerData()方法(但我测试了一个如下所示)。

当我将模型与QColumnView一起使用时,列的大小是固定的。我的数据模型中各个节点的宽度差别很大,所以我正在寻找一种方法让QColumnView根据data()方法返回的数据自动设置列的宽度。

我找不到任何“setResizeMode()”方法,该方法可用于其他类型的视图。我尝试从data()返回一个QSize(),其输入角色为SizeHintRole,如下所示:

            text = str(node.display_name())
            value = QtCore.QSize(len(text)*10,20)

奇怪的是,高度似乎已调整,但列的宽度仍然是恒定的。

我尝试实现一个看起来像这样的headerData方法:

def headerData(self, index, orientation, role ) :
    ret = QtGui.QHeaderView()
    ret.setResizeMode( QtGui.QtHeaderView.ResizeToContents )
    return ret

但这没有效果;我确定标题视图需要以其他方式进行操作和设置,但我无法找到它是什么。

有人能指出一个正确方向的新手吗? 感谢。

1 个答案:

答案 0 :(得分:0)

您可以通过调用setColumnWidths方法重新排列宽度。 例如,尝试将模型信号连接到此类插槽,您就完成了。 插槽可以从模型计算实际宽度,并为setColumnWidths准备列表。