首页 > 其他分享 >qt-垂直布局初步

qt-垂直布局初步

时间:2022-12-15 20:22:33浏览次数:38  
标签:box qt 布局 垂直 b1 QPushButton addWidget

QWidget

在学习垂直布局之前,我们需要了解一个对象,就是QWidget。

它的功能就是创建一个窗口。

垂直布局,包括水平布局,都需要对窗口使用才能显示,我们不能直接将垂直布局显示出来。

垂直布局初步

接下来,我们依然是先贴代码,后作分析。

#include <QApplication>
#include <qwidget.h>
#include <qpushbutton.h>
#include <QVBoxLayout>
int main(int argc, char *argv[]){
    QApplication a(argc, argv);

    QWidget* mw=new QWidget();
    QVBoxLayout* box=new QVBoxLayout();
    mw->setLayout(box);

    QPushButton* b1=new QPushButton("one");
    QPushButton* b2=new QPushButton("two");
    QPushButton* b3=new QPushButton("three");
    QPushButton* b4=new QPushButton("four");

    box->addWidget(b1);
    box->addWidget(b2);
    box->addWidget(b3);
    box->addWidget(b4);

    mw->show();

    return a.exec();
}
    QWidget* mw=new QWidget();
    QVBoxLayout* box=new QVBoxLayout();
    mw->setLayout(box);

在这个部分,我们创建了一个窗口和一个垂直布局。并将窗口与垂直布局关联起来。

    QPushButton* b1=new QPushButton("one");

接下来,我们连续创建了四个按钮。

    box->addWidget(b1);
    box->addWidget(b2);
    box->addWidget(b3);
    box->addWidget(b4);

这一步是垂直布局的关键一步。因为添加的顺序将直接影响到哪个按钮在上,哪个按钮在下。我们可以将垂直布局看作一个数组,谁先被加进去,谁就在前面。目前这个垂直布局数组里面放着【b1,b2,b3,b4】。垂直布局默认从头到尾显示该数组内的控件。

    mw->show();

注意,这里不需要一个一个显示按钮了,因为按钮已经被添加到垂直布局中,而垂直布局又和窗口绑定起来了。所以显示窗口会连带着显示按钮。我们可以将窗口看作垂直布局的父亲,垂直布局是按钮的父亲。qt中,只要显示辈份最大的控件,他的所有后代都会被显示。

添加弹簧(其实我并不知道这个叫什么)

弹簧是垂直布局中的一个占位的东西,但是在添加弹簧前,我们需要将窗口变高,不然可能无法看到弹簧的效果。

    mw->resize(114,514);

请将该代码添加进去,就可以将mw窗口的宽设置为114,高设置为514。

接下来,我们将会把弹簧添加到垂直布局中。注意,弹簧是垂直布局中的内容,不是窗口,窗口仅仅是我们用来显示垂直布局的东西,该文的内容学习的是垂直布局中的东西。

    box->addStretch();

这个函数就是用来添加弹簧的。你可以试一试将该代码添加到不同位置,看看有什么效果。比如:

    box->addStretch();
    box->addWidget(b1);
    box->addWidget(b2);
    box->addWidget(b3);
    box->addWidget(b4);

    box->addWidget(b1);
    box->addWidget(b2);
    box->addWidget(b3);
    box->addWidget(b4);
    box->addStretch();

我们可以看到按钮分别被顶到了窗口的上面和下面。我们也可以通过弹簧这个东西来做到将按钮紧密排列在中间。注意,如果不通过这个方法,那么按钮之间的间距是比较大的。不过我们有其他更多的方法来实现这一效果,请不要依赖这种方法,否则无法精确控制比例。

比如:

    box->addStretch();
    box->addWidget(b1);
    box->addWidget(b2);
    box->addWidget(b3);
    box->addWidget(b4);
    box->addStretch();

固定间距

我们有时候需要设定垂直布局中不同控件之间的间距。这就是垂直布局的固定间距。代码如下:

    box->setSpacing(100);

这样,不同控件之间的间隔就被设置为100像素。但是注意,控件的最上面和最下面是不算控件之间的间隔的。

增加间距

我们可以人为的在两个控件之间增加一个间距而不应用到所有控件之间。代码如下:

    box->addWidget(b1);
    box->addSpacing(200);
    box->addWidget(b2);

我们人为的在b1和b2间添加了一个200像素大小的间距,但是它不会被应用到所有按钮之间。

标签:box,qt,布局,垂直,b1,QPushButton,addWidget
From: https://www.cnblogs.com/bvwvd/p/16985955.html

相关文章

  • ul li水平垂直布局
    li属性方法ul{list-style-type:none;padding:0;}li{display:block;margin:010px;}display:block(块级元素)会独占一行,多个block元素会各自新起一行。默认......
  • 键盘弹起来时,页面布局错乱
    html5页面当点击input输入框弹出安卓手机上键盘就会把背景顶了上来,软键盘弹出时,改变了height,使height:100%,不能达到原来的高度。页面布局就乱了,解决方法:原生js:windo......
  • Qt之自定义输入框(度分秒、经纬度、格式化显示)
    相关资料:http://www.manongjc.com/detail/15-grpefyhtwdpbehh.html  Qt自定义文本输入框实现支持输入度分秒和度两种格式(简易无限制输入)PS:重要的文件我用粗体标注......
  • CAD布局中有些视口内容不显示怎么办?
    CAD绘图过程中,为什么CAD布局中有些视口会显示为空白?CAD视口内容不显示时又该怎么办呢?本文小编就以浩辰CAD软件为例给大家分享一下CAD布局中有些视口内容不显示的原因以及解......
  • python安装pyqt的相关经验
    1:pipinstallPyQt5-ihttps://pypi.douban.com/simple首先安装PyQt5的包;2:pipinstallPyQt5-tools-ihttps://pypi.douban.com/simple这个包需要安......
  • QTreeWidget 添加editingFinished()信号
     一.QTreeWidget设置可编辑connect(m_tree,itemChanged(QTreeWidgetItem*,int),this,SLOT(saveModify(QTreeWidgetItem*,int));QTreeWidgetItem*item=newQTreeWidgetIt......
  • PyQt4 的使用
    其语法简单,与PHP语言很相似,只要有其它语言基础,能很快入门.python的第三方库相当丰富,通信,web,GUI支持库很多.在游戏方面,也颇有造诣,有专门的pygame支持,在GUI方面,W......
  • QT 小数点位数
      QStringnumber(doublen,charformat='g',intprecision=6)来设置小数点位数doublea=27.846234;QStringresult=QString::number(a,'f',2);//"27.85"res......
  • QT MVC模型
      QT项视图类主要有三种:QListView,QTreeView,QTableView,对应的基础Model为QAbstractItemModel(QStandardItemModelo为QAbstractItemModel实现),对于QListView和QTa......
  • 让QT只运行一个实例
         目前使QT运行一个实例有三种方式:1.QSharedMemory     使用共享内存,当第二个进程启动时,判断内存区数据是否建立,如有,则退出;这种方式有弊端,在程序发......