Qt布局管理: 分割窗口QSplitter类讲解(纯代码实现分割窗口)

Qt编程 专栏收录该内容
108 篇文章 20 订阅

一个QSplitter是一个可以包含其他控件的控件,这些控件被一个分隔条隔开,托拽这个分隔条,可以改变splitter的子控件的大小。

QSplitter控件经常做为布局管理器使用,给用户提供更多的界面控制。


实例:

实现功能:使用QSplitter实现分割窗口功能,整个对话框由四个窗口组成,各个窗口之间的大小可以任意拖拽来改变。


步骤:

1.  使用Qt Creater新建Gui应用程序,名称为QSplitter,基类为“QMainWindow”,取消“创建界面”按钮。

2.  在main.cpp中输入下列代码。

#include "mainwindow.h"
#include <QApplication>
#include <QSplitter>
#include <QTextCodec>
#include <QTextEdit>
#include <QObject>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //MainWindow w;
    //w.show();

    QFont font("ZYSong18030" , 12);
    a.setFont(font);

    QSplitter *splitterMain = new QSplitter(Qt::Horizontal, 0); //新建主分割窗口,水平分割

    QTextEdit *textLeft = new QTextEdit(QObject::tr("左部件"),splitterMain);
    textLeft->setAlignment(Qt::AlignCenter);

    QSplitter *splitterRight = new QSplitter(Qt::Vertical, splitterMain);   //右分割窗口,并以主分割窗口作为父窗口
    splitterRight->setOpaqueResize(false);

    QTextEdit *textUp = new QTextEdit(QObject::tr("上部件"),splitterRight);
    textUp->setAlignment(Qt::AlignCenter);

    QTextEdit *textMiddle = new QTextEdit(QObject::tr("中间部件"),splitterRight);
    textMiddle->setAlignment(Qt::AlignCenter);

    QTextEdit *textBottom = new QTextEdit(QObject::tr("底部部件"),splitterRight);
    textBottom->setAlignment(Qt::AlignCenter);

    splitterMain->setStretchFactor(1,1);
    splitterMain->setWindowTitle(QObject::tr("分割窗口"));
    splitterMain->show();

    return a.exec();
}


3.  点击运行按钮,效果图如下:



程序中的部分函数讲解:

1.  QFont font("ZYSong18030" , 12);     a.setFont(font);  这两句代码用于指定显示的字体。

我也可以根据需要,这样来写: QFont font("楷体" , 18,QFont::Bold);   a.setFont(font);   此时便是楷体字体,字号为18,粗体显示。

效果如下:



2.  QSplitter *splitterMain = new QSplitter(Qt::Horizontal, 0);    新建一个QSplitter类对象,作为主分割窗口,并且设定此窗口为水平分割窗口。

QTextEdit *textLeft = new QTextEdit(QObject::tr("左部件"),splitterMain);    新建一个QTextEdit类对象,并将其插入主分割窗口。

textLeft->setAlignment(Qt::AlignCenter);    设置TextEdit对象中文本的对齐方式。

水平对齐方式有:
Constant                   Value            Description
Qt::AlignLeft            0x0001           Aligns with the left edge.
Qt::AlignRight          0x0002          Aligns with the right edge.
Qt::AlignHCenter     0x0004          Centers horizontally in the available space.
Qt::AlignJustify        0x0008          Justifies the text in the available space.

垂直对齐方式有:
Constant                   Value       Description
Qt::AlignTop             0x0020     Aligns with the top.
Qt::AlignBottom        0x0040     Aligns with the bottom.
Qt::AlignVCenter      0x0080     Centers vertically in the available space.
Qt::AlignBaseline     0x0100     Aligns with the baseline.

QSplitter *splitterRight = new QSplitter(Qt::Vertical, splitterMain);    新建一个QSplitter类对象,作为右分割窗口,并以主分割窗口作为父窗口。设定分割窗口为垂直分割窗口。


3.  splitterRight->setOpaqueResize(true);  设定在拖拽分割条时,是否实时更新。若为true,则实时更新;否则在拖拽时显示一条虚线。


splitterRight->setOpaqueResize(true);效果如下:(注意观察分割条的颜色)



splitterRight->setOpaqueResize(false);效果如下:(注意观察分割条的颜色)



4.  splitterMain->setStretchFactor(1,1);  此函数用于设定:控件是否可伸缩。第一个参数用于指定控件的序号。第二个函数大于0时,表示控件可伸缩,小于0时,表示控件不可伸缩。

splitterMain->setStretchFactor(1,1); 效果如下:(注意观察中间的垂直分割条)



splitterMain->setStretchFactor(1,0); 效果如下:(注意观察中间的垂直分割条)


相关推荐
<p> 本课程详细、全面地介绍了 Qt 开发中的各个技术细节,并且额外赠送在嵌入式端编写Qt程序的技巧。整个课程涵盖知识点非常多,知识模块囊括 Qt-Core 组件、QWidgets、多媒体、网络、绘图、数据库,超过200个 C++ 的分析和使用,学完之后将拥有 Qt 图形界面开发的非常坚实的功底。  </p> <p> <br /></p> <p> 每个知识点不仅仅会通过视频讲解清楚,并且会配以精心安排的实验和作业,用来保证学习过程中切实掌握核心技术和概念,通过实验来巩固,通过实验来检验,实验与作业的目的是发现问题,发现技术盲点,通过答疑和沟通夯实技术技能。 </p> <p> <br /></p> <p> <span style="color:#E53333;"><strong>注意</strong></span>本套视频教程来源于线下的实体班级,因此视频中有少量场景对话和学生问答,对此比较介意的亲们谨慎购买。 </p> <p> <img src="https://img-bss.csdnimg.cn/202006111209386420.jpg" alt="" /></p> <p> <br /></p> <p> <span style="color:#E53333;"><strong>注意</strong></span>本套视频教程包含大量课堂源码,包含对应每个知识点的精心编排的作业。由于CSDN官方规定在课程介绍中不能出现作者的联系方式,因此在这里无法直接给出QQ答疑号,视频中的源码、资料和作业文档链接统一在购买后从CSDN平台跟我沟通,我会及时回复跟进。 </p> <p> <br /></p> <p> <strong><span style="color:#E53333;">注意</span></strong>本套视频教程包含全套10套作业题,覆盖所有视频知识点,循序渐进,各个击破,作业总纲如下 </p> <p> <img src="https://img-bss.csdnimg.cn/202006111337059806.jpg" alt="" /></p> <p> <br /></p> <p> <br /></p> <p> </p><p style="font-size:16px;"> <span style="color:#3A4151;">下面是部分作业题目展示,每道题都有知识点说明,是检验学习效果的一大利器</span> </p> <p style="font-size:16px;"> <span style="color:#3A4151;"><span style="font-size:16px;">部分作业展示,为了防止盗图盗题对题干做了模糊处理</span></span> </p> <p style="font-size:16px;"> <span style="color:#3A4151;"><img src="https://img-bss.csdnimg.cn/202006121455228969.jpg" alt="" /><br /></span> </p> <p style="font-size:16px;"> <span style="color:#3A4151;"><br /></span> </p> <p style="font-size:16px;"> 部分作业展示,为了防止盗图盗题对题干做了模糊处理 </p> <p> <img src="https://img-bss.csdnimg.cn/202006121448525610.jpg" alt="" /></p> <p> <br /></p> <p> <span style="font-size:16px;">部分作业展示,为了防止盗图盗题对题干做了模糊处理</span> </p> <p> <img src="https://img-bss.csdnimg.cn/202006121450392202.jpg" alt="" /></p> <p> <br /></p> <p> <span style="font-size:16px;">部分作业展示,为了防止盗图盗题对题干做了模糊处理</span> </p> <p> <img src="https://img-bss.csdnimg.cn/202006121450547079.jpg" alt="" /></p> <p> <br /></p> <p> <span style="font-size:16px;">部分作业展示,为了防止盗图盗题对题干做了模糊处理</span> </p> <p> <img src="https://img-bss.csdnimg.cn/202006121455494156.jpg" alt="" /></p> <p> …… …… </p>
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值