06 布局管理器
2017-05-10 16:17
141 查看
当一个窗口对象上有多个子窗口对象组成时,我们需要调整它们的显示坐标, 而且窗口大小改变时,子窗口对象的大小也不会自动的改变。
布局管理可以方便的管理子窗口对象, 而且可以实现窗口大小改变时,按比例来改变子窗口对象.
一个布局管理器对象可以装载多个子窗口对象,也要以装载子布局管理器对象。它们之间的坐标会由布局管理器自动安排,而且也可以指定它们之间的显示比例.
一个窗口对象只能指定一个布局管理器对象,但布局管理里可以包含子布局管理器对象.
QVBoxLayout
是垂直布局管理器, 也就是垂直地按排子窗口对象。
例如:创建一个窗口对象, 上面有一个微调框, 进度条和滚动条:
main.cpp:
再如一个窗口对象上,需要6个按钮,三个一行,其中第一行占窗口的60%大小,每行中间的按钮占行的80%大小.
main.cpp
除了垂直/水平布局管理器外,QFormLayout, QGridLayout, and QStackedLayout
布局管理可以方便的管理子窗口对象, 而且可以实现窗口大小改变时,按比例来改变子窗口对象.
一个布局管理器对象可以装载多个子窗口对象,也要以装载子布局管理器对象。它们之间的坐标会由布局管理器自动安排,而且也可以指定它们之间的显示比例.
一个窗口对象只能指定一个布局管理器对象,但布局管理里可以包含子布局管理器对象.
QVBoxLayout
是垂直布局管理器, 也就是垂直地按排子窗口对象。
例如:创建一个窗口对象, 上面有一个微调框, 进度条和滚动条:
main.cpp:
#include <QApplication> #include <QWidget> #include <QSpinBox> #include <QProgressBar> #include <QSlider> #include <QVBoxLayout> class MyWin : public QWidget { private: QVBoxLayout *vlayout; QSpinBox *box; QProgressBar *bar; QSlider *slider; public: MyWin(); ~MyWin(); }; MyWin::MyWin() { vlayout = new QVBoxLayout(this); //创建布局管理器对象,并指定此窗口对象使用此布局管理器 box = new QSpinBox; //微调框 bar = new QProgressBar; // 进度条 slider = new QSlider(Qt::Horizontal); // 滚动条 //增加子窗口对象 vlayout->addWidget(box, 2); //增加微调框对象,并指定它占用的比例为20% vlayout->addWidget(bar, 5); //增加进度条对象,指定它占50% vlayout->addWidget(slider, 3); //默认情况下,子窗口组件都是高度固定,需要设置允许垂直扩展都会随随着布局管理变化 box->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); bar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); slider->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); //当QSpinBox对象的值发生改变时,进度条和滚动条的值跟着变 connect(box, SIGNAL(valueChanged(int)), bar, SLOT(setValue(int))); connect(box, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int))); //当滚动条拖动时,微调框与进度条的值跟着改变 connect(slider, SIGNAL(valueChanged(int)), bar, SLOT(setValue(int))); connect(slider, SIGNAL(valueChanged(int)), box, SLOT(setValue(int))); } MyWin::~MyWin() { delete slider; delete bar; delete box; delete vlayout; } int main(int argc, char *argv[]) { QApplication a(argc, argv); MyWin win; win.show(); return a.exec(); }
再如一个窗口对象上,需要6个按钮,三个一行,其中第一行占窗口的60%大小,每行中间的按钮占行的80%大小.
main.cpp
#include <QApplication> #include <QWidget> #include <QPushButton> #include <QVBoxLayout> #include <QHBoxLayout> #define COUNT 6 class MyWin : public QWidget { private: QPushButton *btns[COUNT]; QHBoxLayout *hlayout1, *hlayout2; QVBoxLayout *vlayout; public: MyWin(QWidget *parent=NULL); ~MyWin(); }; MyWin::MyWin(QWidget *parent) : QWidget(parent) { hlayout1 = new QHBoxLayout; hlayout2 = new QHBoxLayout; vlayout = new QVBoxLayout; for (int i = 0; i < COUNT; i++) { btns[i] = new QPushButton; bt 4000 ns[i]->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); } hlayout1->addWidget(btns[0], 1); hlayout1->addWidget(btns[1], 8); hlayout1->addWidget(btns[2], 1); hlayout2->addWidget(btns[3], 1); hlayout2->addWidget(btns[4], 8); hlayout2->addWidget(btns[5], 1); vlayout->addLayout(hlayout1, 6); vlayout->addLayout(hlayout2, 4); this->setLayout(vlayout); } MyWin::~MyWin() { for (int i = 0; i < COUNT; i++) delete btns[i]; delete hlayout1; delete hlayout2; delete vlayout; } int main(int argc, char *argv[]) { QApplication a(argc, argv); MyWin win; win.show(); return a.exec(); }
除了垂直/水平布局管理器外,QFormLayout, QGridLayout, and QStackedLayout
相关文章推荐
- GTK+重拾--06 布局管理器学习
- RecyclerView指定布局管理器
- Android开发5:布局管理器2(表格布局TableLayout)
- Android开发5:布局管理器2(表格布局TableLayout)
- Qt入门(动作、布局管理器、菜工状)
- 浅谈 Qt 布局管理器 如何让控件随着窗口变化
- Java可视化编程,基于布局管理器的UI设计
- 博为峰Java技术文章 ——JavaSE Swing 布局管理器概述
- AWT的标准布局管理器
- java-Layout(布局管理器)
- AWT 布局管理器
- Java图形化界面设计——布局管理器之FlowLayout(流式布局)
- Java基本功练习十七GUI(图形用户界面基础【基本概念及其使用、三种布局管理器实现同样的框架练习】)
- [转]Java图形化界面设计——布局管理器之BorderLayout(边界布局)
- Android笔记---- Android应用的界面开发(1)View和布局管理器
- 3.2布局管理器3.2.1
- Java图形化界面设计——布局管理器之GridLayout(网格布局)
- java常用组件以及布局管理器
- Java布局管理器深入讨论
- Java 的布局管理器GridBagLayout的用法