如何在QSplitter中设置QTreeView的初始大小?

2024-09-30 01:21:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个QSplitter内有一个QTreeView,我想设置它的初始大小。我发现我可以在QTreeView上同时设置setMinimumWidth(val)和{},但这两个似乎都不能满足我的需要。在

setMinimumWidth(val)只防止QTreeView小于val的值,setFixedWidth阻止用户完全调整QTreeView的大小。在

有没有办法通过设置QSplitter或设置QTreeView来设置初始大小?我想我需要设置sizeHint,但我不太确定。在

我在PyQt5中使用python3


Tags: 用户valpyqt5python3办法setfixedwidthqtreeviewqsplitter
1条回答
网友
1楼 · 发布于 2024-09-30 01:21:26

您可以重新实现sizeHint来设置初始大小:

class TreeView(QtWidgets.QTreeView):
    def sizeHint(self):
        size = super().sizeHint()
        size.setWidth(320)
        return size

但是,如果不希望创建子类,并且您不介意设置一个比例初始大小,那么可以使用QSplitter.setSizes。Qt文档以这种方式定义此方法的行为:

The overall size of the splitter widget is not affected. Instead, any additional/missing space is distributed amongst the widgets according to the relative weight of the sizes. [emphasis added]

所以大小之和是否大于拆分器并不重要;重要的是相对权重。考虑到这一点,我们只需计算出可用的最大可能大小,然后将其相应地划分,如下所示:

^{pr2}$

这将使第一个小部件比第二个小部件大两倍。在

除了这些方法之外,还可以使用QSplitter.saveStateQSplitter.restoreState来保存和恢复用户在上一个会话中设置的拆分器大小。在

PS

如果您使用的是Qt设计器,那么上面的sizeHint方法可以用于小部件升级,这非常容易实现。有关如何执行此操作的说明,请参见this answer。在

相关问题 更多 >

    热门问题