本文为原创文章,转载请注明出处,或注明转载自“黄邦勇帅(原名:黄勇)
本文出自本人原创著作《Qt5.10 GUI完全参考手册》网盘地址:
https://pan.baidu.com/s/1iqagt4SEC8PUYx6t3ku39Q
《C++语法详解》网盘地址:https://pan.baidu.com/s/1dIxLMN5b91zpJN2sZv1MNg
若对C++语法不熟悉,建议参阅本人所著《C++语法详解》一书,电子工业出版社出版,该书语法示例短小精悍,对查阅C++知识点相当方便,并对语法原理进行了透彻、深入详细的讲解,可确保读者彻底弄懂C++的原理,彻底解惑C++,使其知其然更知其所以然。此书是一本全面了解C++不可多得的案头必备图书。
内容边距就是页边距,指的是布局中的各子部件(内容)与周围四个边的距离,内容边距比较简单,下面列出需要使用到的函数(内容边距默认情况下使用的是样式提供的值,在大多数平台上,默认为11像素)
QMargins QLayout::contentsMargins() const;
void QLayout::getContentsMargins(int *left, int *top, int *right, int *bottom) const;
void QLayout::setContentsMargins(int left, int top, int right, int bottom);
void QLayout::setContentsMargins(const QMargins& margin);
间距(spacing)指的是各部件之间的距离。间距有两种方式实现,一种是向各部件间添加一个QSpacerItem实例,一种是直接指定各部件间的距离。
1、QSpacerItem类
使用QSpacerItem类可以创建自定义的间距,使用该类创建的间距相当于是一个空白部件,它是布局中的一个项目,会在布局中占据一个位置,布局会为其分配一个索引号,也就是说由QSpacerItem类创建的对象是可以由布局管理器进行管理的。通常不需要使用这个类,因为在各布局管理器中有相应的函数代替了该类的功能。该类包括析构函数在内,总共只有4个公有的成员函数,其余函数都是从其父类继承而来的受保护的函数,以下为这些成员函数
4、设置间距
因不同布局管理器使用的设置间距的函数不相同,下面先讲解QBoxLayout布局中的间距函数。注意:向布局中添加或插入的间距是QSpacerItem,因此布局会为QSpacerItem分配一个索引号,这会改变各部件之间的原有索引号,比如在索引为0的按钮1和索引为1的钮2之间插入一个QSpacerItem之后,则按钮1的索引仍为0,QSpacerItem的索引为1,按钮2的索引为2,
示例5.5:间距简单应用
#include
#include
using namespace std;
int main(int argc, char *argv[]){ QApplication a(argc,argv);
QWidget w;
QPushButton *pb=new QPushButton("AAA"); QPushButton *pb1=new QPushButton("BBB");
QPushButton *pb2=new QPushButton("CCC"); QPushButton *pb3=new QPushButton("DDD");
pb->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed);
pb1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
pb2->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
QHBoxLayout *pg=new QHBoxLayout;
pg->addWidget(pb);
pg->addStretch(1); //添加一个拉伸因子为1的间距(QSpacerItem)
pg->addWidget(pb1);
pg->addStretch(2);//添加一个拉伸因子为2的间距
pg->addWidget(pb2);
w.setLayout(pg); w.resize(300,100); w.show(); return a.exec(); }
示例5.6:间距与空白部件
#include
#include
using namespace std;
int main(int argc, char *argv[]){ QApplication a(argc,argv);
QWidget w;
QPushButton *pb=new QPushButton("AAA"); QPushButton *pb1=new QPushButton("BBB");
QPushButton *pb2=new QPushButton("CCC");
QHBoxLayout *pg=new QHBoxLayout;
QSpacerItem *sp=new QSpacerItem(22,22); //创建一个宽和高都为22的QSpacerItem
pg->setSpacing(22); /*设置spacing属性,使每个子部件之间的间距为22,spacing属性设置的间距不是空白部件,不会被分配索引号*/
pg->addWidget(pb);
pg->addSpacing(22); //添加一个间距(QSpacerItem),该间距是空白部件,会分配一个索引号。
pg->addWidget(pb1);
pg->addWidget(pb2);
pg->insertSpacerItem(1,sp); /*把QSpacerItem实例sp插入索引为1的位置,注意sp是空白部件,会分配一个索引号。*/
pg->setStretch(1,1); //把索引为1的部件(即上一行插入的sp)的拉伸因子设置为1
pg->insertStretch(4,1); //插入一个拉伸因子为1的间距(QSpacerItem)
pg->insertStretch(6,2);
w.setLayout(pg); w.resize(300,100); w.show(); return a.exec(); }
本文作者:黄邦勇帅(原名:黄勇)