QTreeView水平滚动条问题
我的 QTreeView 水平滚动条有问题,它没有出现。我已将水平滚动条策略设置为 ScrollBarAsNeeded,但如果需要它不会出现。尝试将展开和折叠的信号连接到插槽:
connect(this, SIGNAL(expanded(QModelIndex)), this, SLOT(update_scroll_area(QModelIndex)));
connect(this, SIGNAL(collapsed(QModelIndex)), this, SLOT(update_scroll_area(QModelIndex)));
该插槽由一行代码组成:
update_scroll_area(const QModelIndex& i)
{
resizeColumnToContents(i.column());
}
这使得滚动条工作,但仅当我展开/折叠树视图项目时。
我需要“每次”都有工作水平滚动条,从启动应用程序到结束。如何组织?
谢谢。
I've a problem with QTreeView horizontal scrollbar, it doesn't appear. I've set horizontal scrollbar policy to ScrollBarAsNeeded, but it doesn't appear if needed. Have tried to connect expanded and collapsed signals to a slot:
connect(this, SIGNAL(expanded(QModelIndex)), this, SLOT(update_scroll_area(QModelIndex)));
connect(this, SIGNAL(collapsed(QModelIndex)), this, SLOT(update_scroll_area(QModelIndex)));
The slot consists of one line of code:
update_scroll_area(const QModelIndex& i)
{
resizeColumnToContents(i.column());
}
This makes scrollbar working, but only when I'm expanding/collapsing the tree view items.
I need to have working horizontal scrollbar "every time", from starting the application till its end. How can it be organized?
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
此常见问题解答条目可能会有所帮助。
简而言之:
This FAQ entry may help.
In a nutshell:
如果您使用 QT5,请尝试此操作以使 treewidget “水平”自动滚动:
headerStretchLastSection
。和
ui->treeWidget->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
if you use QT5 try this to make treewidget "horizontal" autoscroll:
headerStretchLastSection
.and
ui->treeWidget->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
对我有用的是:
horizontalScrollBarPolicy
属性设置为ScrollBarAsNeeded
。headerMinimumSectionSize
属性设置为与“几何宽度”值相同的值。headerDefaultSectionSize
属性设置为headerMinimumSectionSize
值的大约两倍。headerStretchLastSection
属性(如其他地方所述)。我在我正在修改的表单上使用 Qt Designer 完成了此操作。
What worked for me was to:
horizontalScrollBarPolicy
property toScrollBarAsNeeded
.headerMinimumSectionSize
property to the same value as the 'geometry Width' value.headerDefaultSectionSize
property to about twice theheaderMinimumSectionSize
value.headerStretchLastSection
property (as described elsewhere).I did this using Qt Designer on the form I was modifying.
在我看来,使用后缀椭圆(即“...”)截断树项而不是显示水平滚动条的默认
QTreeWidget
行为是疯狂的、无用的,并且永远不会任何人都想要的。但这就是我们得到的。以下 PySide2 特定的
QTreeWidget
子类以列感知方式智能地解决了这一缺陷,可缩放到当前树中的列数:理论上,此实现应该可以轻松地重写为 PyQt5 和 C++。因为 Qt 应该比明显不智能的默认设置更好。
In my view, the default
QTreeWidget
behaviour of truncating tree items with a suffixing ellipse (i.e., "...") rather than displaying a horizontal scrollbar is insane, useless, and never what anyone wants. But it's what we got.The following PySide2-specific
QTreeWidget
subclass intelligently addresses this deficiency in a column-aware manner scaling to the number of columns in the current tree:In theory, this implementation should be trivially rewritable into both PyQt5 and C++. Because Qt deserves better than blatantly unintelligent defaults.
我刚刚发现另一种情况,水平滚动条不会显示在自定义 treeView 类中。也就是说,当您将“setHeaderHidden()”设置为 true &不要重写 resizeEvent()。这正是发生在我和我身上的事情。我通过调用插槽 resizeColumnToContents(0) 覆盖了 resizeEvent() ,因为我的自定义树视图类中只有一列来使水平滚动条工作。
认为这可能对某人有帮助。
I just found out another case where horizontal scroll bar won't show up in custom treeView class. That is when you set "setHeaderHidden()" to true & don't override resizeEvent(). This is exactly what happend to me & i overrode resizeEvent() by calling the slot, resizeColumnToContents(0) as i only have one column in my custom tree view class to make the horizontal scroll bar work.
Thought this might be helpful to some one.