06 布局管理器
来源:互联网 发布:搜款网服饰网络批发 编辑:程序博客网 时间:2024/06/04 22:53
当一个窗口对象上有多个子窗口对象组成时,我们需要调整它们的显示坐标, 而且窗口大小改变时,子窗口对象的大小也不会自动的改变。
布局管理可以方便的管理子窗口对象, 而且可以实现窗口大小改变时,按比例来改变子窗口对象.
一个布局管理器对象可以装载多个子窗口对象,也要以装载子布局管理器对象。它们之间的坐标会由布局管理器自动安排,而且也可以指定它们之间的显示比例.
一个窗口对象只能指定一个布局管理器对象,但布局管理里可以包含子布局管理器对象.
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 6class 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; btns[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
0 0
- 06 布局管理器
- 06 绝对定位布局管理器
- 布局管理器
- 布局管理器
- 布局管理器
- 布局管理器
- 布局管理器
- 布局管理器
- 布局管理器
- 布局管理器
- 布局管理器
- 布局管理器
- 布局管理器
- 布局管理器
- 布局管理器
- 布局管理器
- 布局管理器
- 布局管理器
- ajaxfileupload+struts2文件上传、下载
- 新手学习Photon之创建Photon服务器
- C++ explicit构造函数
- 计算机语言中是如何处理sin函数的?
- 今日进度--论文5.10
- 06 布局管理器
- jsp application对象使用 统计访问人数
- java中设置日期格式的方式一般用SimpleDateFormat("YY-MM-dd")就可以了,但为什么有的 SimpleDateFormat("YY-MM-dd",locale.getDefau
- json字符串与java对象互转
- Java内部类原理分析(静态内部类和成员内部类)
- Mecanim(Speed、IK、Grab)
- Python获得24小时List的方法
- SVN个人总结(比git简单)(跟git一样,mac也是不需要配置的,直接就有,windows还是需要配置的)
- iOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解