Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“最奇怪的Qt布局”;“肉食”;问题_Qt - Fatal编程技术网

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

“最奇怪的Qt布局”;“肉食”;问题,qt,Qt,我正在编写自己的类,非常类似于工具栏,它将在其中的水平框布局对象下包含小部件 我有一个小部件类作为容器 我有一个从QPushButton派生的小部件类,用于自定义绘制(在pos 0,0处显示加载的图像) 我初始化布局对象: this->buttonLayout = new QHBoxLayout(this); this->buttonLayout->setContentsMargins(0, 0, 0, 0); this->buttonLayout->setSpac

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

我有一个小部件类作为容器 我有一个从QPushButton派生的小部件类,用于自定义绘制(在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);
最后,我创建了一个间隔对象,以确保所有工具栏按钮都向左对齐

QSpacerItem * spacerItem = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding);
this->buttonLayout->addItem(spacerItem);
我的button类正在构造函数中定义一个“setMinimumSize”,它在调试器下是正确的。它还重新定义了在运行时调用的“hintSize”,并且值是正确的

我的问题是这个。我将3个“按钮”加载到工具栏上。它们都有不同的尺寸如果版面上的间距为0前两个按钮将被精确截断9个像素!,但是第三个就可以了如果布局间距为-1按钮将以其可变大小很好地显示,但它们之间将有两个像素的空间(我不需要任何空间)。最后,如果布局间距为“9”,则所有内容都会显示良好

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

我到处都找不到答案

其他信息:

我把范围缩小到:

对于每个button类,我都会加载一个QImage。hintSize返回其大小,在调试器下是正确的。返回的大小与photoshop对图像的描述以及图像属性对图像的描述相匹配

但是,在工具栏上,在布局之后,它的宽度始终为“-9”!!!所以下面右边的按钮总是画在它上面,隐藏了按钮左边9 x高的像素

QSpacerItem * spacerItem = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding);
this->buttonLayout->addItem(spacerItem);
如果我在button类的sizeHint中手动添加一个“+9”,它就可以完美地工作

我不明白这个问题是从哪里来的。在布局和水平间隔之间的某个地方,像素被“偷走”,我不知道这到底是怎么回事

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

解决方案:

这似乎是OSX下的一个问题。请注意以下错误报告:

决议:


通过为每个按钮设置Qt::WA_layoututeUseSwidgetRect属性。

只是一个猜测,但是您是否研究了frameSize()返回的是什么?为button类以及平台发布代码。(Mac OS X在QPushButton派生类中存在一些愚蠢的间距问题。)@Dave,你能告诉我更多关于OSX下的这些问题吗?这是Qt意识到的吗?