QT界面布局之QGridLayout网格布局

之前一直用拖控件的方式来做ui界面,最大的心得就是,要充分利用“布局类型”和“弹簧”。

但是对于动态界面来说(例如,用户点击某个按钮后,要在界面中添加一个新控件),通过拖拽设计的ui就力不从心了。

今天记录下如何用代码来添加布局,并把各个空间放置到这个布局中去。

在ui设计师拖拽空间的界面,我们可以看到共有4种布局类型:

QT界面布局之QGridLayout网格布局_第1张图片

用法都是差不多的,这里以网格类型为例,QGridLayout。

布局类的代码可以这样,在ui中拖入一些控件并设置布局,然后读读QT自动生成的这个函数就能学会了:QT界面布局之QGridLayout网格布局_第2张图片

1、设置布局所在的控件

布局必须被某个widget接管才能有效(也即给某个widget设置布局),一般我们会给容器类的控件设置布局,例如:窗口QDialog、组QGroupBox、框QFrame等等。

也即每个布局必须依附于某个widget才行,有两种方法:
(1)构造时直接设置:代码为QGridLayout(QWidget *parent),
(2)例如:frameGridLayout.setParent(ui->checkBoxFrame->layout());注意:布局类的parent必须也是布局类,而不能是QWidget。

(3)直接给QWidget设置布局:
QGridLayout my_GridLayout;
ui->groupBox_2->setLayout(&my_GridLayout);

2、向布局中添加控件和弹簧

添加控件的3个重载函数为:

(1)void QLayout::addWidget(QWidget *wwidget)
(2)void QGridLayout::addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())
(3)void QGridLayout::addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())

形参解释:widget要放置的控件指针;row/column将控件放在第几行几列中;fromRow从第几行开始放;rowSpan总共要占几行;alignment为控件在网格中的布局方式,有:靠上/下/左/右、居中、自适应文字等方式。

添加弹簧和添加控件类似,只不过用的是addItem,自行查阅帮助即可

 

 

 

你可能感兴趣的:(QT)