• Qt布局管理


    设计软件中各个部件的位置排列,有两种方法:

    1.设置widget的在父窗体中的坐标和大小

    widget->move(x,y);

    widget->resize(width,height);

    //widget->setGeometry(QRect(x,y,width,height));

    什么时候用:不想被布局约束,对这种控件可控制时

    例如下面的可活动按钮

    缺点:在遇到很多个部件时,一个个算坐标会很麻烦

    部件不自动随父窗体的变化而变化(这里要重写resizeEvent事件算变化比例建立父子窗体之间的联系,而布局很容易做到)

     

    2.布局管理Layout(可控制的部件不要使用布局中,一旦改变会影响到整体布局)

    经常要用到的三个布局部件

    QHBoxLayout水平布局

    QVBoxLayout垂直布局

    QGridLayout表格布局

     

    ————————————————————————————————

    QHBoxLayout和QVBoxLayout用法相同

    基本:

    vlayout->addWidget(w1);

    vlayout->addWidget(w2);

    ……

    ——————————————————————————————————

    QGridLayout用法

    layout->addWidget(widget,row,column,rowSpan,columnSpan);

    layout->addLayout(layout,row,column,rowSpan,columnSpan);

    (row,column):控件占据左上角的单元格位置

    rowSpan:控件占据的行数

    columnSpan:控件占据的列数(不写默认为1)

    ——————————————————————————————

    控件随窗体伸缩

    将布局与主窗体建立联系

    layout=new QHBoxLayout(this);

    或者this->setLayout(layout);

    ——————————————————————————————

    layout->addStretch();可伸缩的空间

    layout->setAlignment(Qt::AlignHCenter);//布局内控件水平居中 

    layout->setSpacing(10);//控件间隔为10

    layout->setMargin(10);//页边距为10

    Qt设计器中spacer控件

    以上在对控件位置调整时常用

     

    ——————————————————————————————————

    结合SizePolicy属性控制布局管理中的控件的尺寸自适应方式

    也就是控件随主窗体伸缩方式(可自行增大或缩小)

    QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);//可自行增大和收缩

    Fixed:不能放大或缩小

    Minimum:不能小于sizeHint尺寸,可放大(若设置了最大尺寸)

    Maximum:不能放大,可缩小到允许的最小尺寸(若setMinimumSize(10,10)只能缩小到(10,10))

    Preferred:控件的sizeHint是他的Hint,可以放大或缩小

     

    ————————————————————————————————————————————

    比例因子的使用

    例:布局中有左右两控件,右边比左边水平伸缩2倍

    sizePolicy.setHorizontalStretch(1);
    sizePolicy.setVerticalStretch(0);

    left->setSizePolicy(sizePolicy);

    sizePolicy.setHorizontalStretch(2);
    sizePolicy.setVerticalStretch(0);

    left->setSizePolicy(sizePolicy);

    水平伸展比例(1,2)

    垂直伸展比例(0,0)

    ——————————————————————————————————————————————————

    布局顾名思义是对控件的位置的整体规划,每个控件之间都存在着位置关系,所以改变控件(移动、关闭)会破坏布局

    ——————————————————————————————————————————————————

    结论:两种方法结合使用,应该可以应对大部分界面布局

    本人是菜鸟,实践不多,如有错误欢迎指正

    —————————————————————————————————————————————————

    上述代码是为了理解布局使用,Qt设计器可实现

     

  • 相关阅读:
    源码剖析Django REST framework的请求生命周期
    Django REST framework中的版本控制
    Django REST framework反向生成url
    Django的ModelForm
    SQL Server 2008 R2导出数据脚本的方法
    未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0 提供程序
    Webservice发布出现 测试窗体只能用于来自本地计算机的请求
    StreamWriter和StremReader简单的用法
    (转)PHP下编码转换函数mb_convert_encoding与iconv的使用说明
    (转)PHP中构造函数和析构函数解析
  • 原文地址:https://www.cnblogs.com/cainiaoaixuexi/p/3243274.html
Copyright © 2020-2023  润新知