最奇怪的Qt布局“肉食”问题

时间:2011-07-15 20:22:28

标签: qt

我正在编写自己的类,非常类似于工具栏,它将在其内部的水平框布局对象下包含小部件。

我有一个小部件类作为容器 我有一个从QPushButton派生的widget类,用于自定义绘制(真正显示在pos 0,0处加载的图像)。

我初始化一个布局对象:

this->buttonLayout = new QHBoxLayout(this);
this->buttonLayout->setContentsMargins(0, 0, 0, 0);
this->buttonLayout->setSpacing(0);
this->buttonLayout->setObjectName("buttonsLayout");

然后我开始初始化小部件并将它们“添加”到类似于此的布局上:

// once button is created.. add it...
this->buttonLayout->addWidget(button);

最后,我创建了一个spacer对象,以确保我的所有工具栏按钮都对齐到左边。

QSpacerItem * spacerItem = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding);
this->buttonLayout->addItem(spacerItem);

我的按钮类在构造函数中定义了一个“setMinimumSize”,它在调试器下是正确的。它还重新定义了在运行时调用的“hintSize”,并且值是正确的。

我的问题是这个。我在工具栏上加载了3个“按钮”。所有都有可变的大小。 如果布局上的间距为0 ,前两个按钮将被截断9个像素!但第三个按钮将没问题。 如果布局间距为-1 ,按钮将很好地显示其可变大小,但它们之间将有两个像素空间(我不想要任何空间)。最后,如果布局间距为“9”,则Everything将显示正常。

为什么间距“0”会弄乱按钮布局导致叠加?数字“9”来自哪里?当间距为“0”时,为什么前两个按钮(例如除了最后一个按钮之外的所有按钮)都被截断了9个像素?

我无法在任何地方找到答案。

附加信息:

我把它缩小到这个:

对于每个按钮类,我加载一个QImage。 hintSize返回其大小,在调试器下是正确的。返回的大小与photoshop关于图像的内容相符,图像的属性对此有所说明......

但是,在工具栏上,布局后,它的宽度总是“ - 9”!所以右边的按钮总是涂在它上面,将按钮的9 x高度像素隐藏在左边。

如果我在我的按钮类中手动为sizeHint添加“+9”,它就能完美运行。

我无法理解问题的来源。在布局和水平间隔之间的某处,像素被“偷走”,我不知道这里到底发生了什么。

有没有人遇到过这样的事情?为什么我必须从每个按钮“预先窃取”9个像素,以便布局完美?

1 个答案:

答案 0 :(得分:4)

解决方案:

在OSX下,这似乎是一个已知的Qt问题。请注意以下错误报告:https://bugreports.qt.io/browse/QTBUG-14591

分辨率:

为每个按钮设置Qt :: WA_LayoutUsesWidgetRect属性。

相关问题