gpt4 book ai didi

c++ - QComboBox 融合到 QSpinBox

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:57:37 26 4
gpt4 key购买 nike

所以我正在为一些科学软件编写 Qt GUI,并且我有 QSpinBoxes 和 QDoubleSpinBoxes 用于用户应该设置其单位的数量。因为我连续有几个这样的旋转框-组合框对,所以我认为将右侧的 ComboBox 与左侧的 SpinBox 融合在一起最容易混淆。

我尝试过使用样式表来实现这一点,但是当我这样做时我失去了 plastique 风格。

执行此操作的 [最好是非笨拙的] 方法是什么?

谢谢,

安德烈亚斯

最佳答案

如果通过融合你的意思是旋转框和组合框之间的距离应该为零,那么你应该创建 QProxyStyle 后代,如果要求 QStyle::PM_LayoutHorizo​​ntalSpacing 重新实现 styleHint 以返回 -1,并声明一个插槽称为 layoutSpacingImplementation(阅读 QStyle documentation),它正在接收两种小部件类型(代表它们的枚举)。

MyClass::layoutSpacingImplementation( QSizePolicy::ControlType control1, 
SizePolicy::ControlType control2,
Qt::Orientation orientation,
const QStyleOption * option = 0,
const QWidget * widget = 0 ) const
{
if (orientation == Qt::Horizontal &&
((control1 == QSizePolicy::SpinBox && control2 == QSizePolicy::ComboBox) ||
(control2 == QSizePolicy::SpinBox && control1 == QSizePolicy::ComboBox)))
return 0;

int spacing = baseStyle()->styleHint(QStyle::PM_LayoutHorizontalSpacing);
if (spacing >= 0) return spacing;
return baseStyle()->layoutSpacing(control1, control2, orientation, option, widget);
}

然后你为那些融合的项目放置的小部件设置这个样式,使用它以前的样式作为基础样式。

这会将所有这些元素融合在一起,因此最好在不应融合的元素之间添加一些额外的空格。这是一个小问题,但不幸的是,文档没有说明哪个控件描述了左控件或右控件(我猜这意味着空格应该是独立于顺序的),所以没有其他方法可以实现它。

编辑:

刚看到张贴的图片。标准 qt 中没有这样的控制,通过典型的方式实现它是不太可能的。您可能会尝试创建您自己的布局类或您自己的 QWidget 后代,这将使您的旋转框部分覆盖组合框(准确地说覆盖左圆边部分),这样会产生融合的错觉。然而,如果用户使用具有更宽边缘组合框的样式,这可能看起来很难看,这将在 sping 框的侧面“向外看”。这是一种快速而丑陋的解决方法。

除此之外,我认为您唯一的选择是创建自己的小部件 - 但即使使用 QStyle 的绘画功能(我猜主要是 drawControl)和实现单独的 QSpingBox 和 QCombobox 的代码片段,这也意味着很多很多的工作.考虑到您想要在 UI 中实现简单的图形效果,我认为这是不值得的。

关于c++ - QComboBox 融合到 QSpinBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7577176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com