Qt窗口分割器QSplitter类使用详解

0 897
索鸟 2021-03-22
需要:0索币

分割窗口在应用程序中经常用到,比如在类似资源管理器的窗口设计中:

下面用代码实现上面窗口的设计:

1.建立项目时基类选择QMainWindow,取消Gernerate form复选框的选中状态。

2.在main.cpp中编写如下代码:

#include <QtGui/QApplication>

#include "mainwindow.h"

#include <QSplitter>

#include <QTextCodec>

#include <QTextEdit>

int main(int argc, char *argv[])

{

    QApplication a(argc, argv);

    //设置字体

    QFont font("ZYSong18030",12);

    a.setFont(font);

    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

    //主splitter,以下填充text和子splitter

    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);

    splitterRight->setOpaqueResize(false);

    //开始填充右边的splitter,放上两个text

    QTextEdit *textTop=new QTextEdit(QObject::tr("Right Top Widget"),splitterRight);

    textTop->setAlignment(Qt::AlignCenter);

    QTextEdit *textBottom=new QTextEdit(QObject::tr("Right Bottom Widget"),splitterRight);

    textBottom->setAlignment(Qt::AlignCenter);

    //设置主splitter

    splitterMain->setStretchFactor(1,1);

    splitterMain->setWindowTitle(QObject::tr("Splitter"));

    splitterMain->show();

    return a.exec();

}


解析:

1.QSplitter的构造方法:

QSplitter *splitterMain=new QSplitter(Qt::Horizontal,0);

第一个参数通过Qt::Horizontal 和 Qt::Vertical来设定为水平分割或垂直分割。第二个设定0代表是主窗口,无父窗口。

不过子splitter设置的

new QSplitter(Qt::Vertical,splitterMain);

代表主窗口是splitterMain。则子splitter就被添加到splitterMain中。

添加时为从左至右(或从上至下)添加;


2.添加QTextEdit控件。


QTextEdit *textLeft=new QTextEdit(QObject::tr("Left Widget"),splitterMain);

第一个参数设置文本内容,第二个参数设置主窗体。


3.设置拖动时是否实时更新


splitterRight->setOpaqueResize(false);

false为不实时更新——在拖动时候只显示一条灰色的线条,在拖动到位并释放鼠标后再显示分割条。默认为true——实时更新。

4.设定可伸缩控件:

splitterMain->setStretchFactor(1,1);

第一个参数代表控件序号,第一个序号为0.后面参数0代表不可伸缩,非0代表可伸缩。

这里设置右边的可伸缩。当拉伸整个窗口时候,左边保持原来宽度。

拉伸后,我们发现左边的宽度不变。

————————————————

原文链接:https://blog.csdn.net/a649518776/article/details/6633857

回帖
  • 消灭零回复
相关主题
2020年最新最新Kubernetes视频教程(K8s)教程 2
程序员转型之制作网课变现,月入过万告别996 1
索鸟快传2.0发布啦 1
两个不同网络的电脑怎么实现文件的互相访问呢? 1
网盘多账号登录软件 1
Java实战闲云旅游项目基于vue+element-ui 1
单点登录技术解决方案基于OAuth2.0的网关鉴权RSA算法生成令牌 1
QT5获取剪贴板上文本信息QT设置剪贴板内容 1
springboot2实战在线购物系统电商系统 1
python web实战之爱家租房项目 1
windows COM实用入门教程 1
C++游戏开发之C++实现的水果忍者游戏 1
计算机视觉库opencv教程 1
node.js实战图书管理系统express框架实现 1
C++实战教程之远程桌面远程控制实战 1
相关主题
PHP7报A non well formed numeric value encountered 0
Linux系统下关闭mongodb的几种命令分享 0
mongodb删除数据、删除集合、删除数据库的命令 0
Git&Github极速入门与攻坚实战课程 0
python爬虫教程使用Django和scrapy实现 0
libnetsnmpmibs.so.31: cannot open shared object file 0
数据结构和算法视频教程 0
redis的hash结构怎么删除数据呢? 0
C++和LUA解析器的数据交互实战视频 0
mongodb errmsg" : "too many users are authenticated 0
C++基础入门视频教程 0
用30个小时精通C++视频教程可能吗? 0
C++分布式多线程游戏服务器开发视频教程socket tcp boost库 0
C++培训教程就业班教程 0
layui的util工具格式时间戳为字符串 0
C++实战教程之远程桌面远程控制实战 1
网络安全培训视频教程 0
LINUX_C++软件工程师视频教程高级项目实战 0
C++高级数据结构与算法视频教程 0
跨域问题很头疼?通过配置nginx轻松解决ajax跨域问题 0