博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
qt利用QSplitter任意拆分窗口
阅读量:4167 次
发布时间:2019-05-26

本文共 3059 字,大约阅读时间需要 10 分钟。

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

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

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

对于使用QSplitter拆分窗口:

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

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

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

实例:

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

步骤:

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

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

#include "mainwindow.h"#include 
#include
#include
#include
#include
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); 效果如下:(注意观察中间的垂直分割条)

你可能感兴趣的文章
SQL里的EXISTS与in、not exists与not in
查看>>
MySQL字符集及MySQL编码转换
查看>>
XSLT简介
查看>>
[翻译]xml的加密和解密
查看>>
Mysql数据库基本操作概要
查看>>
javascript比较日期
查看>>
在脚本中取table单元格的值(javascript)
查看>>
一些有用的js代码
查看>>
性能分析样例
查看>>
C#中out 及 ref 区别
查看>>
数字签名的原理
查看>>
.NET中RAS加解密和签名与验证的c#实现代码讲解,及实现程序提供
查看>>
根据控件ID获取控件
查看>>
ACE篇之四:通过ACE日志策略进行运行时配置
查看>>
ACE篇之五:ACE容器之一(双向链表)
查看>>
ACE篇之六:ACE容器之二(栈)
查看>>
ACE篇之七:ACE容器之三(队列)
查看>>
ACE篇之八:ACE容器之四(数组)
查看>>
ACE篇之九:ACE容器之五(集合)
查看>>
ACE篇之十:ACE容器之六(映射表管理器)
查看>>