五、分割窗口QSplitter(Qt5 GUI系列)

文章介绍了如何在Qt中使用QSplitter类设计可拖动大小的分割窗口,包括设置对齐方式、透明度调整和控件伸缩性,以实现类似文件资源管理器或代码编辑器的界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


目录

一、设计需求

二、实现代码

三、代码解析

四、总结


一、设计需求

        在类似文件资源管理器的窗口或者代码编辑器的界面中都存在着分割窗口应用。本文就利用QSplitter类设计一个分割窗口功能的界面,实现各个窗口之间的大小能够随意拖拽改变。

二、实现代码

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

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //设置字体
    QFont font("ZYSong18030",12);
    a.setFont(font);

    //主分割窗口
    QSplitter *splitterMain =new QSplitter(Qt::Horizontal,0);
    QTextEdit *textLeft =new QTextEdit(QObject::tr("Left Widget"),splitterMain);
    textLeft->setAlignment(Qt::AlignCenter);

    //右部分割窗口
    QSplitter *splitterRight =new QSplitter(Qt::Vertical,splitterMain);
    //调用setOpaqueResize()方法用于
    //设定分割窗口的分割条在拖曳时是否实时更新显示,若设为 true 则实时更新显示,
    //若设为 false 则在拖曳时只显示一条灰色的粗线条,在拖曳到位并释放鼠标后再显
    //示分割条。默认设置为 true
    splitterRight->setOpaqueResize(false);

    QTextEdit *textUp =new QTextEdit(QObject::tr("Top Widget"),splitterRight);
    textUp->setAlignment(Qt::AlignCenter);
    QTextEdit *textBottom =new QTextEdit(QObject::tr("Bottom Widget"),splitterRight);
    textBottom->setAlignment(Qt::AlignCenter);

    //调用setStretchFactor()方法用于设定可
    //伸缩控件,它的第1个参数用于指定设置的控件序号,控件序号按插入的先后次序
    //从0起依次编号;第2个参数为大于0的值,表示此控件为可伸缩控件。
    //此实例中
    //设定右部分分割窗口为可伸缩控件,当整个对话框的宽度发生改变时,左部的文件
    //编辑框宽度保持不变,右部的分割窗口宽度随整个对话框大小的改变进行调整
    splitterMain->setStretchFactor(1,1);

    //设定标题
    splitterMain->setWindowTitle(QObject::tr("Splitter"));
    splitterMain->show();

    //MainWindow w;
    //w.show();
    
    return a.exec();
}

 结果展示:

三、代码解析

(1)setAlignment()
        代码中此函数用来设定TextEdit中文字的对齐方式,常用的对齐方式有以下几种:
        Qt::AlignLeft:左对齐。
        Qt::AlignRight:右对齐。
        Qt::AlignCenter:文字居中 (Qt::AlignHCenter 为水平居中,Qt::AlignVCenter
为垂直居中)。
        Qt::AlignUp:文字与顶端对齐。
        Qt::AlignBottoms 文字与底部对齐。

四、总结

        本文中的实例简单的展示了,Qt中如何设计一个分割窗口。如果想要修改分割窗口的布局可以调整控件的插入顺序,或者使用QSplitter的addWidget()函数来调整控件的顺序,来达到合适布局。代码如下:

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

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //设置字体
    QFont font("ZYSong18030",12);
    a.setFont(font);

    //主分割窗口
    QSplitter *splitterMain =new QSplitter(Qt::Horizontal,0);
    //修改控件的顺序
//    QTextEdit *textLeft =new QTextEdit(QObject::tr("Left Widget"),splitterMain);
//    textLeft->setAlignment(Qt::AlignCenter);

    //右部分割窗口
    QSplitter *splitterRight =new QSplitter(Qt::Vertical,splitterMain);
    //调用setOpaqueResize()方法用于
    //设定分割窗口的分割条在拖曳时是否实时更新显示,若设为 true 则实时更新显示,
    //若设为 false 则在拖曳时只显示一条灰色的粗线条,在拖曳到位并释放鼠标后再显
    //示分割条。默认设置为 true
    splitterRight->setOpaqueResize(false);

    QTextEdit *textUp =new QTextEdit(QObject::tr("Top Widget"),splitterRight);
    textUp->setAlignment(Qt::AlignCenter);
    QTextEdit *textBottom =new QTextEdit(QObject::tr("Bottom Widget"),splitterRight);
    textBottom->setAlignment(Qt::AlignCenter);

    //调用setStretchFactor()方法用于设定可
    //伸缩控件,它的第1个参数用于指定设置的控件序号,控件序号按插入的先后次序
    //从0起依次编号;第2个参数为大于0的值,表示此控件为可伸缩控件。
    //此实例中
    //设定右部分分割窗口为可伸缩控件,当整个对话框的宽度发生改变时,左部的文件
    //编辑框宽度保持不变,右部的分割窗口宽度随整个对话框大小的改变进行调整
    splitterMain->setStretchFactor(1,1);

    //修改到此位置
    QTextEdit *textLeft =new QTextEdit(QObject::tr("Left Widget"),splitterMain);
    textLeft->setAlignment(Qt::AlignCenter);

    //设定标题
    splitterMain->setWindowTitle(QObject::tr("Splitter"));
    splitterMain->show();

    //MainWindow w;
    //w.show();
    
    return a.exec();
}

结果展示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值