qt - 如何制作带有一组按钮的拆分器?

Posted

技术标签:

【中文标题】qt - 如何制作带有一组按钮的拆分器?【英文标题】:qt - How do I make a splitter with a set of buttons on it? 【发布时间】:2012-01-12 07:00:30 【问题描述】:

是否有人遇到过将按钮(或任何其他小部件)放在分离器手柄顶部的问题?我试图获取句柄,设置其布局并将控件放在那里,但我得到了一些奇怪的外观。

我的主要目标是创建一个如下所示的选择器对话框:

我得到了什么:

代码:

QDialog dialog = new QDialog();
dialog.setLayout(new QVBoxLayout());
QSplitter splitter = new QSplitter();

splitter.setSizePolicy(new QSizePolicy(QSizePolicy.Policy.MinimumExpanding, QSizePolicy.Policy.Fixed));
splitter.addWidget(new QListWidget());
splitter.addWidget(new QTableWidget());
dialog.layout().addWidget(splitter);

QSplitterHandle h = splitter.handle(1);
h.setFixedWidth(30); // I added this line to show the splitter handle
QVBoxLayout lt = new QVBoxLayout();
lt.setSpacing(0);
lt.setMargin(0);
lt.addWidget(new QPushButton("Hello", dialog));
lt.addWidget(new QPushButton("Good bye", dialog));
h.setLayout(lt);

dialog.show();

【问题讨论】:

它对我来说很正常。可以发一下截图吗? 您使用的是哪个占碑版本? 我建议现在使用 4.6(如果使用 Windows,甚至是 4.7),诺基亚将不再为占碑提供任何支持,而且它 (4.5.2) 不是社区发布,所以我们不知道关于它的怪癖。 【参考方案1】:

这会产生更好的结果:

// h.setFixedWidth(30);
splitter.setHandleWidth(30);

为了获得更好的结果,我建议继承 QSplitterHandle 并重新实现 sizeHint()。浏览QSplitterHandle documentation。

您可以更改布局设置以获得准确的按钮位置。 例如:

lt.addStrecth();

要删除“relief”-bar,您必须从 QSplitterHandle 子类化并重新实现 paintEvent()

【讨论】:

好一点,但还不适合。你知道如何避免通过句柄“relief”来分隔小部件吗? @AndreyAtapin 对小部件没有影响。按钮位置由布局控制。 @AndreyAtapin 我使用 Gentoo Linux 和 Qt 4.7.4。 谢谢,添加拉伸作品,虽然我不明白其中的魔力 :) 我的意思是“浮雕”栏被粘贴在按钮之间(见截图)。看来这是特定于操作系统的。现在的问题是如何删除这个栏 @AndreyAtapin QSplitterHandle 只是在paintEvent 中绘制句柄“浮雕”,在其他方面它是一个简单的QWidget。

以上是关于qt - 如何制作带有一组按钮的拆分器?的主要内容,如果未能解决你的问题,请参考以下文章

Qt:如何制作像 QTextField 一样对齐的自定义小部件

如何制作 Qt 线程包装器

如何在悬停而不是单击时制作 Twitter Bootstrap 的“拆分按钮下拉菜单”下拉菜单?

如何使用完成按钮制作 UIPickerView?

如何在 PyQt 中制作双箭头按钮

如何在 Qt 中制作可展开/可折叠的部分小部件