ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

QT布局QGridLayout QHBoxLayout QVBoxLayout简要分析

2022-09-07 08:33:16  阅读:175  来源: 互联网

标签:QHBoxLayout QT QVBoxLayout dlgLayout 40 addWidget btnLayout gridLayout new


在分析之前,先吐槽下M$的MFC,竟然没有相对布局!(至少我不知道,每次都是代码中控制布局), (2022-09-07星仔批注, MFC从VS2015开始就有布局了,功能精炼)
M$这么多年,也不发展一下,你看C#都有相对布局...

参考精通Qt4编程(第2版),先看看总体的布局图

然后看看代码

CLoginDlg::CLoginDlg(QWidget* parent/* = NULL */) : QDialog(parent)
{
        //QGridLayout
        usrLabel = new QLabel(tr("用户名:"));
    pwdLabel = new QLabel(tr("密  码:"));
        usrLineEdit = new QLineEdit;
        pwdLineEdit = new QLineEdit;
        pwdLineEdit->setEchoMode(QLineEdit::Password);
        gridLayout = new QGridLayout;
        gridLayout->addWidget(usrLabel, 0, 0, 1, 1);
        gridLayout->addWidget(usrLineEdit, 0, 1, 1, 3);
        gridLayout->addWidget(pwdLabel, 1, 0, 1, 1);
        gridLayout->addWidget(pwdLineEdit, 1, 1, 1, 3);

        //QHBoxLayout
        okBtn = new QPushButton(tr("确定"));
        cancelBtn = new QPushButton(tr("取消"));
        btnLayout = new QHBoxLayout;
        btnLayout->setSpacing(60);
        btnLayout->addWidget(okBtn);
        btnLayout->addWidget(cancelBtn);

        //QVBoxLayout
        dlgLayout = new QVBoxLayout;
    dlgLayout->setMargin(40);
        dlgLayout->addLayout(gridLayout);
    dlgLayout->addStretch(40);
        dlgLayout->addLayout(btnLayout);
        setLayout(dlgLayout);

        connect(okBtn, SIGNAL(clicked()), this, SLOT(accept()));
        connect(cancelBtn, SIGNAL(clicked()), this, SLOT(reject()));

        setWindowTitle(tr("登录"));
        resize(300, 200);
}

这里面一共有3个布局QGridLayout/QHBoxLayout/QVBoxLayout
看看QGridLayout

局管理器gridLayout中的具体位置,其中前两个实参分别表示行和列的位置(行号和列号),后两个参数分别表示行的跨度和列的跨度
gridLayout->addWidget(usrLineEdit, 0, 1, 1, 3);
可见,跨度可以确定一个控件的相对大小,占得越多就越大
QHBoxLayout/QVBoxLayout比较简单,一个是水平的排,一个是垂直的排

运行代码,结果如下:

为了方便看,我做了标识,然后放大窗口,又做了标识

图中的40,就是这行代码的功劳:dlgLayout->setMargin(40);
60是这行代码的功劳:btnLayout->setSpacing(60);
还有一行代码dlgLayout->addStretch(40),作如下解释:

函数QVBoxLayout::addStretch()函数在垂直布局管理器dlgLayout对象中加入一个大小为40的stretch,这将使得布局管理器gridLayout和btnLayout之间的默认距离设置为40,同时当上下拉伸对话框的高度时,该stretch可以自由伸缩,从而保证gridLayout和btnLayout管理器内部各窗口部件的高度以及彼此间的垂直距离保持不变。

以上,由于代码比较简单,大家也能一目了然吧.
可以看出,字体大小并不会随着窗口的变大而变大(当然控件的高度也没有变).

代码下载: http://q1024.com/files/layoutest.rar

 

标签:QHBoxLayout,QT,QVBoxLayout,dlgLayout,40,addWidget,btnLayout,gridLayout,new
来源: https://www.cnblogs.com/xingzaicpp/p/16663983.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有