刚添加到布局中的小部件的QWidget::height()

4

如何获取刚添加到布局中的小部件的最终高度,但由于这个原因,它尚未调整为其最终大小?

基本上我需要做到以下几点:

myGridLayout->addWidget ( somewidget, 0, 0, 1, 1 );

QPushButton *b = new QPushButton(somewidget);
b->setGeometry( somewidget->width() - 50,
                somewidget->height()/2 - 150,
                50, 300);

我想做的是在刚添加的小部件的右边缘中间插入一个按钮(50x300),但为此我需要知道小部件的尺寸,因为它在布局中没有完全调整大小,所以我无法正确获取其尺寸。有什么想法吗?

2个回答

1
通常情况下,布局的内容在显示之前会被计算。如果您需要提前强制执行它,可以调用QLayout::activate()QLayout::update(),这将重新执行或更新其父窗口小部件的布局。

2
我尝试了所有的方法,但都没有成功。然而,我决定采取另一种方向。请查看所选答案。感谢您的帮助! - Daniel

0
如果我理解正确的话,这应该可以实现您想要做的事情,而无需在正确时间捕获大小。将布局添加到您的“somewidget”中,并将按钮添加到其中即可。
myGridLayout->addWidget(somewidget, 0, 0, 1, 1 );

QGridLayout *layout = new QGridLayout(somewidget);
QPushButton *button = new QPushButton();
button->setText("button");
button->setMaximumSize(50,300);
button->setMinimumSize(50,300);
button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
layout->addWidget(button, 0, 0, Qt::AlignVCenter | Qt::AlignRight);

谢谢你的回答。我考虑过这个,但有一个问题。你需要通过以下方式将某些小部件的布局设置为“布局”:somewidget->setLayout(layout)。这不会导致“somewidget”中已有的内容混乱吗? - Daniel
1
是的,那会让它变得有些复杂。我建议尝试使用布局和可能的嵌套布局来实现您想要的效果。如果不行的话,如果 somewidget 是您自己的子类,您应该重新实现 resizeEvent()。这将始终为该小部件提供正确的几何形状。 - Arnold Spence
我的解决方案是创建一个具有网格布局的自定义小部件,在其中放置“某个小部件”。它将是一个3x3的网格,其中中央/中间单元格将被“某个小部件”占据,而在边缘单元格上,我会放置按钮,正好在我需要的位置。这与您的解决方案类似。感谢您的回答! - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接