龙空技术网

C++QT开发——布局管理器

音视频开发老舅 432

前言:

现在小伙伴们对“java布局管理器”都比较关怀,朋友们都需要了解一些“java布局管理器”的相关资讯。那么小编也在网上网罗了一些对于“java布局管理器””的相关内容,希望朋友们能喜欢,看官们快快来了解一下吧!

布局管理器可以让程序员摆脱繁琐的窗口位置大小设置工作。并且布局管理器可以依据窗口大小变更布局控件的位置大小。

布局管理器基类为QLayout继承至QObject 和QLayoutItem,它是一个抽象基类,需要被进一步继承才能使用。它的派生类有QHBoxLayout、QVBoxLayout和QGridLayout。

​ 每个窗口对象都可以设置一个布局管理器,来管理所有它的子窗口,由于布局管理器继承至QObject,那么布局管理的内存释放也可以托管给窗口对象,而所有添加到布局管理器中的窗口对象,它们的内存释放又都托管给这个布局管理器。

​ 通过窗口对象的setLayout来设置布局管理器,如果事先已经设置了一个布局管理器,那么会替换掉这个布局管理器。

 void QWidget::setLayout(QLayout *layout)

​ 你可以简单的理解布局管理器为窗口的一部分。

1 QHBoxLayout与QVBoxLayout

​ QHBoxLayout、QVBoxLayout它们都继承至QBoxLayout,QBoxLayout又继承至QLayout。

​ QHBoxLayout是水平布局管理器,可以将所有托管给它的窗口对象按照水平方向进行布局。

​ QVBoxLayout是垂直布局管理器,可以将所有托管给它的窗口对象按照垂直方向进行布局。

将窗口添加到布局管理器中

【领QT开发教程学习资料,点击下方链接免费领取↓↓,先码住不迷路~】

点击→领取「链接」

 void QBoxLayout::addWidget(QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment())/*widget      窗口对象stretch     伸缩系数alignment   对齐方式Qt::Aligment是Qt中的一个枚举类型,具体请查看帮助文档*/  

设置伸缩系数

 void QBoxLayout::setStretch(int index,int stretch)

添加类似弹簧的东西

 void QBoxLayout::addStretch(int stretch= 0)

设置布局管理中窗口的间隔

 void QBoxLayout::setSpacing(int spacing)  

布局管理器中添加间隙

 void QBoxLayout::addSpacing(int size);

设置布局管理器边界

 void QLayout::setMargin(int margin)

设置对其方式

 bool QLayout::setAlignment(QWidget *w, Qt::Alignment alignment)  
2 QGridLayout表格布局管理器

行伸缩系数

void QGridLayout::setRowStretch(int row,int stretch)

列的伸缩系数

void QGridLayout::setColumnStretch(int column,int stretch)

设置间隔

void QGridLayout::setSpacing(int spacing)

设置行的最小高

void QGridLayout::setRowMinimumHeight(int row, int minSize)

设置列的最小宽

void QGridLayout::setColumnMinimumWidth(int column, int minSize)

设置对齐方式

bool QLayout::setAlignment(QWidget *w, Qt::Alignment alignment)

【领QT开发教程学习资料,点击下方链接免费领取↓↓,先码住不迷路~】

点击→领取「链接」

3 嵌套布局管理器

​ 有些时候,我们需要实现复杂的布局效果,单单使用一种布局管理器,无法完成,那么这个时候需要嵌套使用布局管理器。即布局管理器中添加布局管理器。

QHBoxLayout与QVBoxLayout使用以下函数来嵌套其它布局管理器:

void QBoxLayout::addLayout(QLayout *layout, int stretch = 0)

QGridLayout使用以下函数来嵌套其它布局管理器:

void QGridLayout::addLayout(QLayout *layout, int row, int column, Qt::Alignment alignment = Qt::Alignment())
4 获取布局之后窗口大小

​ 使用布局管理器之后,如果想在构造函数中获取窗口大小,这个时候就不能使用size函数来获取,需要通过sizeHint函数来获取。

​ 这是因为,size获取的是窗口实际大小,一般通过resize来设置,不设置的时候也有默认大小。

​ 然而如果设置了布局管理器,那么窗口在显示的时候还会按照特定的布局策略重置窗口大小,而sizeHint获取到的是重置后的窗口大小。函数原型如下:

 virtual QSize sizeHint() const

注意:如果没有使用布局管理器,那么sizeHint返回的无效的值

标签: #java布局管理器