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

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



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

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

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

  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 plain copy
  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的构造方法:

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代表可伸缩。

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


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值