Qt拆分窗口可以使用QSplitter,也可以使用比较容易使用布局控件来完成,本文章给出使用QSplitter分割窗口的例子。

QSplitter 继承自QFrame,而QFrame又继承自QWidget,这点很重要。

对于使用QSplitter拆分窗口:

  1)新建一个QSplitter,就意味着新建了一个QWidget

  2)不同的QSplitter对象通过指定父子关系来完成嵌套(划分窗口)

  3)QSplitter可以放置到你指定的任何窗口内

例子1:将一个窗口拆分为左右两列,如下图所示:

代码如下:

int main(int argc, char *argv[])
{
//例子1,
qDebug("Mainframe start...\n");
QApplication app(argc, argv);

QTextCodec::setCodecForTr(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));
QTextCodec::setCodecForLocale(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));

QSplitter *pSpliter = new QSplitter(Qt::Horizontal);
//QTextEdit* pLeftEdt = new QTextEdit(pSpliter); //此注释指定父窗口,打开后,后面的pSpliter->addWidget(pLeftEdt); 可以注释掉

QTextEdit* pLeftEdt = new QTextEdit;
pLeftEdt->setText(QObject::tr("左窗口"));
//QTextEdit* pRightEdt = new QTextEdit(pSpliter); //此注释指定父窗口,打开后,后面的pSpliter->addWidget(pRightEdt); 可以注释掉
QTextEdit* pRightEdt = new QTextEdit;
pRightEdt->setText(QObject::tr("右窗口"));
pSpliter->addWidget(pLeftEdt);
pSpliter->addWidget(pRightEdt);

pSpliter->setStretchFactor(0, 1);//下面两句设置左右两列的宽度比为1:4

pSpliter->setStretchFactor(1, 4);
pSpliter->setWindowTitle(QObject::tr("Split-Wnd Demo1"));
pSpliter->show();
return app.exec();

}

例子2:将一个窗口拆分为左右两列,右面再拆分为上下两列,如下图所示:

代码如下:

qDebug("Mainframe start...\n");
QApplication app(argc, argv);

QTextCodec::setCodecForTr(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));
QTextCodec::setCodecForLocale(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));

QSplitter *pSpliter = new QSplitter(Qt::Horizontal);
QTextEdit* pLeftEdt = new QTextEdit(pSpliter);
pLeftEdt->setText(QObject::tr("左窗口"));

QSplitter *pRightSpliter = new QSplitter(Qt::Vertical, pSpliter);
QTextEdit* pRightTopEdt = new QTextEdit(pRightSpliter);
pRightTopEdt->setText(QObject::tr("右上窗口"));
QTextEdit* pRightBtmEdt = new QTextEdit(pRightSpliter);
pRightBtmEdt->setText(QObject::tr("右下窗口"));
pSpliter->setStretchFactor(0, 1);
pSpliter->setStretchFactor(1, 4);

pRightSpliter->setStretchFactor(0, 1);//右面窗口上下窗口高度比为1:4
pRightSpliter->setStretchFactor(1, 4);
pSpliter->setWindowTitle(QObject::tr("Split-Wnd Demo2"));

pSpliter->show();
return app.exec();

例子3:将一个窗口拆分为左右两列,左面再拆分为上下两列,与例子2恰好相反,如下图所示:

代码如下:

qDebug("Mainframe start...\n");
QApplication app(argc, argv);

QTextCodec::setCodecForTr(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));
QTextCodec::setCodecForLocale(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));

QSplitter *pLeftSpliter = new QSplitter(Qt::Vertical);
QTextEdit* pLeftTopEdt = new QTextEdit(pLeftSpliter);
pLeftTopEdt->setText(QObject::tr("左上窗口"));
QTextEdit* pLeftBtmEdt = new QTextEdit(pLeftSpliter);
pLeftBtmEdt->setText(QObject::tr("左下窗口"));

QSplitter *pSpliter = new QSplitter(Qt::Horizontal);
QTextEdit* pRightEdt = new QTextEdit;
pRightEdt->setText(QObject::tr("右窗口"));

pSpliter->addWidget(pLeftSpliter);
pSpliter->addWidget(pRightEdt);

pSpliter->setStretchFactor(0, 4);
pSpliter->setStretchFactor(1, 1);//左右宽度比为4:1

pLeftSpliter->setStretchFactor(0, 4);//左面窗口上下窗口高度比为4:1
pLeftSpliter->setStretchFactor(1, 1);
pSpliter->setWindowTitle(QObject::tr("Split-Wnd Demo3"));

pSpliter->show();
return app.exec();

总结:QSplitter一次只能将一个窗口1分为2,横向竖向拆分由参数指定。要理清部件间的父子关系。有了这个思路,可以任意拆分窗口数量

Qt QSplitter任意拆分窗口的更多相关文章

  1. 拆分窗口QSplitter

    拆分窗口中可以添加许多子控件,各个子控件通过拆分线相互分隔开来,拖动该拆分线可以随意改变子控件大小 import sys from PyQt5.QtCore import Qt from PyQt5. ...

  2. 【Qt开发】设置中心窗口 setCentralWidget

    http://blog.csdn.net/qter_wd007/article/details/7028920 Qt程序中的主窗口通常具有一个中心窗口部件.从理论上来讲,任何继承自QWidget的类的 ...

  3. QT笔记之自定义窗口拖拽移动

    1.QT自定义标题栏,拖拽标题栏移动窗口(只能拖拽标题,其他位置无法拖拽) 方法一: 转载:http://blog.sina.com.cn/s/blog_4ba5b45e0102e83h.html . ...

  4. QSplitter实现滑动窗口和悬浮按钮

    1         QSplitter实现滑动窗口和悬浮按钮 软件应用中需要设计右侧滑动窗口,通过一个按钮来实现窗口的隐藏和显示,应用场景比如显示主界面的详细信息. (1)   在qt design中 ...

  5. MFC单文档视图拆分窗口和相关链接

    第一步:准备2个视图类(如CTViewOne, CTViewTwo) 第二步:在CMainFrame类的头文件中添加数据成员变量: //MainFrm.h protected: CSplitterWn ...

  6. QT笔记之不规则窗口的实现

    QT实现的不规则窗口,是根据图片的形状显示 1.去标题栏 2.设置窗口背景为透明色 3.最后给窗口设置背景色 注:背景图为镂空的 格式为.png 图片资源下载:http://pan.baidu.com ...

  7. JAVA 拆分窗口

    //拆分窗口 import java.awt.*; import javax.swing.*; public class Jiemian8 extends JFrame{ JSplitPane cf; ...

  8. MFC拆分窗口及它们之间的数据交换(转)

    转自:http://blog.csdn.net/nuptboyzhb/article/details/7455471 源代码:http://download.csdn.net/detail/nuptb ...

  9. Qt全屏显示窗口、子窗口的相关函数

    Qt全屏显示函数         window.showFullScreen() Qt最大化显示函数         window.showMaximized() Qt最小化显示函数         ...

随机推荐

  1. Python入门篇-面向对象概述

    Python入门篇-面向对象概述 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.语言的分类 面向机器 抽象成机器指令,机器容易理解 代表:汇编语言 面向过程 做一件事情,排出个 ...

  2. 如何确定C++继承层次中的函数调用

    ```cpp //============================================================================ // Name : TS.c ...

  3. 拿webshell方法汇总

    地址:https://blog.csdn.net/Breeze_CAT/article/details/80044676

  4. 两个好的k8s周边项目,mark

    这段时间没有应用, 但应该过段时间就可以派上用场了. 1,像写shell脚本一样写一个operator. https://github.com/flant/shell-operator 2,多集群的k ...

  5. 对 Jenkins+ANT+Jmeter 接口测试的实践

    转载地址:https://testerhome.com/topics/5262 1.前言 最近感觉大家都在讲Jenkins+jmeter+ant或maven的使用,但没有说到具体怎么投入到项目使用,只 ...

  6. c++输出中文乱码解决方案

    问题的原因应该在cmd的编码和c++程序编码(源文件编码)的不同.cmd默认的是gbk编码,而我用的vs code默认是utf-8编码,因而在输出中文文本时会出现乱码. 但我也遇到了一个比较怪异的情况 ...

  7. python list 字符串排序

    #coding:utf-8 import re s = ['dat2','dat10','dat5'] #方法一 new = sorted(s,key = lambda i:int(re.search ...

  8. danci2

    composite 英 ['kɒmpəzɪt] 美 [kɑm'pɑzɪt] n. 复合材料:合成物:菊科 adj. 复合的:合成的:菊科的 vt. 使合成:使混合 a composite of 网络释 ...

  9. vue饿了么UI库-笔记

    1. :rules="{required: true, message: '有效期不能为空'}" :rules="{type:'date',required: true, ...

  10. HBase学习笔记之HBase的安装和配置

    HBase学习笔记之HBase的安装和配置 我是为了调研和验证hbase的bulkload功能,才安装hbase,学习hbase的.为了快速的验证bulkload功能,我安装了一个节点的hadoop集 ...