我正在编写自己的类,非常类似于工具栏,它将在其内部的水平框布局对象下包含小部件。
我有一个小部件类作为容器 我有一个从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个像素,以便布局完美?
答案 0 :(得分:4)
解决方案:
在OSX下,这似乎是一个已知的Qt问题。请注意以下错误报告:https://bugreports.qt.io/browse/QTBUG-14591
分辨率:
为每个按钮设置Qt :: WA_LayoutUsesWidgetRect属性。