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. echarts 如何在世界地图中绘制中国地图

    1.导入 world.china.js  这个js是将world.js 文件 以及china.js文件进行合并 (网上一些中国地图勾勒的身份曲线感觉很飘  所以自己加工了一下china.js中的数据, ...

  2. Gtest:死亡测试

    转自:玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试 一.前言 “死亡测试”名字比较恐怖,这里的“死亡”指的的是程序的崩溃.通常在测试过程中,我们需要 ...

  3. php string常用函数

    <?php $a[]='a'; $a[]='b'; $a[]='C'; echo "</br>"; /* implode — 将一个一维数组的值转化为字符串 说明 ...

  4. UVA-439, Knight Moves(深度优先搜索)

    #include<iostream> #include<queue> #include<cstring> #include<string> #inclu ...

  5. python笔记42-http请求命令行工具(httpie)

    前言 通常我们需要快速的测试某个接口通不通,一般linux上用curl去发http请求,但是这个命令行工具语法有点复杂了,不够直观. python有一个给人类使用的requests库,非常的简单方便. ...

  6. solr的倒序索引

    倒序索引: 在每次进行检索时,搜索引擎必须遍历每个网页,查找网页中是否包含你指定的关键词,这个工作量是十分巨大的,主要原因有: 1.互联网的网页基数非常大; 2.在每个网页中检索是否含有指定的关键词并 ...

  7. python通过一句话判断闰年的代码

    [str(i)+'闰年' for i in range(2000,2100) if i%4 ==0 and i%100 !=0]

  8. Alpha冲刺(6/10)——2019.4.29

    所属课程 软件工程1916|W(福州大学) 作业要求 Alpha冲刺(6/10)--2019.4.29 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪 ...

  9. c# 3.0语言主要增强

    1隐含类型的局部变量 var i=5; var h=23.56; var s="Cshap" var intarr=new[]{1,2,3}; var 为关键字,可以根据后边的初始 ...

  10. 学习:c++指向指针的指针(多级间接寻址)

    指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链.通常,一个指针包含一个变量的地址.当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置. 当一个 ...