首页 > 其他分享 >QT布局QGridLayout QHBoxLayout QVBoxLayout简要分析

QT布局QGridLayout QHBoxLayout QVBoxLayout简要分析

时间:2022-09-07 08:22:43浏览次数:69  
标签:QHBoxLayout QT QVBoxLayout dlgLayout 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,addWidget,btnLayout,gridLayout,new
From: https://www.cnblogs.com/xingzaicpp/p/16663983.html

相关文章

  • [转载]Qt内存泄漏总结(包括检测工具)
    原文链接:http://blog.csdn.net/taiyang1987912/article/details/29271549关于堆栈不清楚的可以参考这篇文章:http://blog.csdn.net/c_base_jin/article/details/25558929一......
  • [转]QT designer中的快捷键
    今天看了看QtDesigner的帮助文档,里面提到了不少快捷键,相信在以后会用的比较多。和大家分享一下:F2:编辑控件名称F3:进入QWidget编辑模式F4:进入SIGNAL/SLOT编辑模式Ctrl+R......
  • QT4.8.6+mingw+qtcreator4.13.3 搭建环境+调试QT源码
    本文测试环境:win7x64由于考虑到跨平台的原因,本安装不基于visualstudio的插件来安装,这样的开发环境和linux更接近.三个文件请准备好:i686-4.8.2-release-posix-dwarf-r......
  • QT Edit Buddies的理解
    这个是用于设置QLabel的buddy的。在这个模式下,可以把QLabel跟其它控件连起来。QLabel可以设置快捷键,当按下快捷键后,窗口焦点就移动到与它连接扩控件上。比如一个QLabel显示......
  • Qt Creator用UI编辑器修改UI后无反应
    今天打开别人的工程,用Qt编辑器修改了一下UI,发现根本没有反应,经多方面摸索,解决如下:方法一:方法二:2021-11-23再次确认,打开别人的代码时,别人没有勾选Shadowbu......
  • Qt的Q_CLASSINFO简要分析
    新建一个继承于QObject的空白类,如下:classMyInfo:publicQObject{Q_OBJECTpublic:explicitMyInfo(QObject*parent=nullptr);signals:publicsl......
  • QT-项目结构概述(一)
    前置环境:Win10+VS2010+qt4.8.6QT项目在VS中文件夹的结构:(在电脑文件夹中除了GeneratedFiles的其他文件都在同一级,添加到VS中会自动分到下面文件夹中。)-FormFiles:存放项......
  • Qt 编译前自动执行和编译后自动执行脚本
    引用:https://blog.csdn.net/wkr2005/article/details/93711321qt的pro配置文件中也可添加各种编译前后的操作及配置,主要通过 QMAKE_POST_LINK和QMAKE_PRE_LINK;QMAKE_POS......
  • ESP8266转RS485/RS232/TTL控制板-控制板实现MQTT通信,485,232,TTL透传(支持断线重连)
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/circuit_module/8266_485_industrial"frameborder="0"scrolling="auto"width="100%"height="1500"><......
  • Qt-C2429:语言功能"嵌套命名空间定义"需要编译器标志"/std:c++latest"
     问题现象:今天早上在给同事讲代码时,打开工程,发现之前可以编译的工程,在未修改代码,未修改SDK的情况下,无法编译。并且提示如下:C2429:语言功能"嵌套命名空间定义"需要编译器......