前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt学习——分割窗口QSplitter类 .

Qt学习——分割窗口QSplitter类 .

作者头像
bear_fish
发布2018-09-20 14:37:50
2.8K0
发布2018-09-20 14:37:50
举报

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

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

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

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

view plaincopy to clipboard

  1. #include <QtGui/QApplication>
  2. #include "mainwindow.h"
  3. #include <QSplitter>
  4. #include <QTextCodec>
  5. #include <QTextEdit>
  6. int main(int argc, char *argv[])  
  7. {  
  8.     QApplication a(argc, argv);  
  9. //设置字体
  10.     QFont font("ZYSong18030",12);  
  11.     a.setFont(font);  
  12.     QTextCodec::setCodecForTr(QTextCodec::codecForLocale());  
  13. //主splitter,以下填充text和子splitter
  14.     QSplitter *splitterMain=new QSplitter(Qt::Horizontal,0);  
  15.     QTextEdit *textLeft=new QTextEdit(QObject::tr("Left Widget"),splitterMain);  
  16.     textLeft->setAlignment(Qt::AlignCenter);  
  17.     QSplitter *splitterRight=new QSplitter(Qt::Vertical,splitterMain);  
  18.     splitterRight->setOpaqueResize(false);  
  19. //开始填充右边的splitter,放上两个text
  20.     QTextEdit *textTop=new QTextEdit(QObject::tr("Right Top Widget"),splitterRight);  
  21.     textTop->setAlignment(Qt::AlignCenter);  
  22.     QTextEdit *textBottom=new QTextEdit(QObject::tr("Right Bottom Widget"),splitterRight);  
  23.     textBottom->setAlignment(Qt::AlignCenter);  
  24. //设置主splitter
  25.     splitterMain->setStretchFactor(1,1);  
  26.     splitterMain->setWindowTitle(QObject::tr("Splitter"));  
  27.     splitterMain->show();  
  28. return a.exec();  
  29. }  

[cpp] view plaincopy

  1. #include <QtGui/QApplication>
  2. #include "mainwindow.h"
  3. #include <QSplitter>
  4. #include <QTextCodec>
  5. #include <QTextEdit>
  6. int main(int argc, char *argv[])  
  7. {  
  8.     QApplication a(argc, argv);  
  9. //设置字体
  10.     QFont font("ZYSong18030",12);  
  11.     a.setFont(font);  
  12.     QTextCodec::setCodecForTr(QTextCodec::codecForLocale());  
  13. //主splitter,以下填充text和子splitter
  14.     QSplitter *splitterMain=new QSplitter(Qt::Horizontal,0);  
  15.     QTextEdit *textLeft=new QTextEdit(QObject::tr("Left Widget"),splitterMain);  
  16.     textLeft->setAlignment(Qt::AlignCenter);  
  17.     QSplitter *splitterRight=new QSplitter(Qt::Vertical,splitterMain);  
  18.     splitterRight->setOpaqueResize(false);  
  19. //开始填充右边的splitter,放上两个text
  20.     QTextEdit *textTop=new QTextEdit(QObject::tr("Right Top Widget"),splitterRight);  
  21.     textTop->setAlignment(Qt::AlignCenter);  
  22.     QTextEdit *textBottom=new QTextEdit(QObject::tr("Right Bottom Widget"),splitterRight);  
  23.     textBottom->setAlignment(Qt::AlignCenter);  
  24. //设置主splitter
  25.     splitterMain->setStretchFactor(1,1);  
  26.     splitterMain->setWindowTitle(QObject::tr("Splitter"));  
  27.     splitterMain->show();  
  28. return a.exec();  
  29. }  

解析:

1.QSplitter的构造方法:

代码语言:javascript
复制
QSplitter *splitterMain=new QSplitter(Qt::Horizontal,0);

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

不过子splitter设置的

代码语言:javascript
复制
new QSplitter(Qt::Vertical,splitterMain);
代码语言:javascript
复制

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

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

2.添加QTextEdit控件。

代码语言:javascript
复制
QTextEdit *textLeft=new QTextEdit(QObject::tr("Left Widget"),splitterMain);

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

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

代码语言:javascript
复制
splitterRight->setOpaqueResize(false);

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

4.设定可伸缩控件:

代码语言:javascript
复制
splitterMain->setStretchFactor(1,1);

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

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年05月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档