2011年9月30日 星期五

透過setGeometry設定相對於父類別的位置

在Qt提供了許多版面配置管理器 - QLayout, QGridLayout, QBoxLayout, QStackedLayout, QHBoxLayout, QVBoxLayout

這裡有一個使用Layout要注意的事情
QSizePolicy
This property holds the default layout behavior of the widget.

If there is a QLayout that manages this widget's children, the size policy specified by that layout is used. If there is no such QLayout, the result of this function is used.
意思應該是說,若已經有一個Layout在管理這一個Widget的話,那麼這一個Widget的大小就是根據這一個Layout的設定來調整。
若沒有Layout來管理這一個Widget的話,Widget才可以透過程式員自行控制。



這一些可能是我還不太會用~當視窗大小版變時,元件也同時會變大,位置變的非常不漂亮。

因此,我必需學會如何自定位置。

在QWidget可以使用setGeometry,可以設定在父類別的座標系統中,其座標位置應該在哪裡。

以下就是一個在一個Widget裡面的QPushButton設定其相對於父類別的相對位置和其大小。

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QLabel>

int
main (
int argc,
char *argv[]
)
{
//
// app is this program's QApplication.
// Here it is created and processes some of the command-line arguments (such as -display under X Window)
//

QApplication app (argc, argv);

//
// Create a main widget
//

QWidget *Widget = new QWidget;
Widget->setWindowTitle ("MainWidget");
Widget->resize (250, 500);

//
// Create a PushButton and the Label is "Hello World", it's parent is Widget
//

QPushButton *button = new QPushButton ("Hello World", Widget);

//
// Set the geometry of the widget relative to its parent
// This example is (20, 0) relative to it's parent
// button's size is width: 100 heigh: 50
//

// button->setGeometry (20, 0, button->sizeHint().rwidth(), button->sizeHint().rheight());
button->setGeometry (20, 0, 100, 50);

Widget->show ();

return app.exec ();
}




參考資料:

沒有留言: