2010-09-09 51 views
3

我创建了一个非常简单的窗口,只有一个按钮。我的按钮ID从窗口右边缘10个像素和底部10个像素。即使窗口被调整大小,我也想保持这个位置。这意味着,仍然从右边10和从底部10。如何将pushButton锚定到小部件?

如何做到这一点??

由于

zalkap

回答

6

在widget安装QGridLayout 2列和2行中,添加上右下角单元中的按钮,则设置在第一行和第一列伸展。

QWidget *widget = new QWidget(); // The main window 
QGridLayout *layout = new QGridLayout(widget); // The layout 
QPushButton *button = new QPushButton(QString("Button"), widget); // The button 

layout->setContentsMargin(10,10,10,10); // To have 10 pixels margins all around the widget 
layout->addWidget(button, 1, 1); 
layout->setRowStretch(0, 1); 
layout->setColumnStretch(0, 1); 
+0

谢谢。有用。 – zalkap 2010-09-14 00:04:44

+4

然后随时接受答案。 – Fred 2010-09-14 01:38:06

+0

即使它完成了工作,我也不会接受这个答案。它为OP的案例提供了一种解决方法,但不会帮助未来的人们检查它,而无需使用网格来学习如何做到这一点。用例可以是UI配置文件某种按钮的用户定义的UI位置。 – 2016-02-18 22:16:53

3

通常,使用布局。这是最简单和最强大的解决方案,它最适合不可预测的小部件大小(由于不同的平台,字体大小,翻译后的字符串等原因,它们在大多数情况下都是不可预测的)。如果你真的需要手动定位(不经常发生),你可以在父对象中重新实现resizeEvent()并自己移动子对象。例如。

void MyParentWidget::resizeEvent(QResizeEvent*) { 
    m_child->move(width() - m_child->width() - 10, height() - m_child->height() - 10); 
} 

这会将孩子移动到右下角。

+0

有时使用布局几乎是不可能的,特别是在处理自定义窗口小部件或复合窗口小部件时,并且希望重叠保持原样的东西,因此唯一有效的解决方案仍然是resizeEvent()。更糟糕的是,在处理复合自定义小部件时,installEventFilter可能是避免子类化的唯一方法。 – 2015-02-06 01:08:33

相关问题