2010-09-09 44 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

相關問題