目录
一、设计需求
在类似文件资源管理器的窗口或者代码编辑器的界面中都存在着分割窗口应用。本文就利用QSplitter类设计一个分割窗口功能的界面,实现各个窗口之间的大小能够随意拖拽改变。
二、实现代码
#include "mainwindow.h"
#include <QApplication>
#include <QSplitter>
#include <QTextEdit>
#include <QTextCodec>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//设置字体
QFont font("ZYSong18030",12);
a.setFont(font);
//主分割窗口
QSplitter *splitterMain =new QSplitter(Qt::Horizontal,0);
QTextEdit *textLeft =new QTextEdit(QObject::tr("Left Widget"),splitterMain);
textLeft->setAlignment(Qt::AlignCenter);
//右部分割窗口
QSplitter *splitterRight =new QSplitter(Qt::Vertical,splitterMain);
//调用setOpaqueResize()方法用于
//设定分割窗口的分割条在拖曳时是否实时更新显示,若设为 true 则实时更新显示,
//若设为 false 则在拖曳时只显示一条灰色的粗线条,在拖曳到位并释放鼠标后再显
//示分割条。默认设置为 true
splitterRight->setOpaqueResize(false);
QTextEdit *textUp =new QTextEdit(QObject::tr("Top Widget"),splitterRight);
textUp->setAlignment(Qt::AlignCenter);
QTextEdit *textBottom =new QTextEdit(QObject::tr("Bottom Widget"),splitterRight);
textBottom->setAlignment(Qt::AlignCenter);
//调用setStretchFactor()方法用于设定可
//伸缩控件,它的第1个参数用于指定设置的控件序号,控件序号按插入的先后次序
//从0起依次编号;第2个参数为大于0的值,表示此控件为可伸缩控件。
//此实例中
//设定右部分分割窗口为可伸缩控件,当整个对话框的宽度发生改变时,左部的文件
//编辑框宽度保持不变,右部的分割窗口宽度随整个对话框大小的改变进行调整
splitterMain->setStretchFactor(1,1);
//设定标题
splitterMain->setWindowTitle(QObject::tr("Splitter"));
splitterMain->show();
//MainWindow w;
//w.show();
return a.exec();
}
结果展示:
三、代码解析
(1)setAlignment()
代码中此函数用来设定TextEdit中文字的对齐方式,常用的对齐方式有以下几种:
Qt::AlignLeft:左对齐。
Qt::AlignRight:右对齐。
Qt::AlignCenter:文字居中 (Qt::AlignHCenter 为水平居中,Qt::AlignVCenter
为垂直居中)。
Qt::AlignUp:文字与顶端对齐。
Qt::AlignBottoms 文字与底部对齐。
四、总结
本文中的实例简单的展示了,Qt中如何设计一个分割窗口。如果想要修改分割窗口的布局可以调整控件的插入顺序,或者使用QSplitter的addWidget()函数来调整控件的顺序,来达到合适布局。代码如下:
#include "mainwindow.h"
#include <QApplication>
#include <QSplitter>
#include <QTextEdit>
#include <QTextCodec>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//设置字体
QFont font("ZYSong18030",12);
a.setFont(font);
//主分割窗口
QSplitter *splitterMain =new QSplitter(Qt::Horizontal,0);
//修改控件的顺序
// QTextEdit *textLeft =new QTextEdit(QObject::tr("Left Widget"),splitterMain);
// textLeft->setAlignment(Qt::AlignCenter);
//右部分割窗口
QSplitter *splitterRight =new QSplitter(Qt::Vertical,splitterMain);
//调用setOpaqueResize()方法用于
//设定分割窗口的分割条在拖曳时是否实时更新显示,若设为 true 则实时更新显示,
//若设为 false 则在拖曳时只显示一条灰色的粗线条,在拖曳到位并释放鼠标后再显
//示分割条。默认设置为 true
splitterRight->setOpaqueResize(false);
QTextEdit *textUp =new QTextEdit(QObject::tr("Top Widget"),splitterRight);
textUp->setAlignment(Qt::AlignCenter);
QTextEdit *textBottom =new QTextEdit(QObject::tr("Bottom Widget"),splitterRight);
textBottom->setAlignment(Qt::AlignCenter);
//调用setStretchFactor()方法用于设定可
//伸缩控件,它的第1个参数用于指定设置的控件序号,控件序号按插入的先后次序
//从0起依次编号;第2个参数为大于0的值,表示此控件为可伸缩控件。
//此实例中
//设定右部分分割窗口为可伸缩控件,当整个对话框的宽度发生改变时,左部的文件
//编辑框宽度保持不变,右部的分割窗口宽度随整个对话框大小的改变进行调整
splitterMain->setStretchFactor(1,1);
//修改到此位置
QTextEdit *textLeft =new QTextEdit(QObject::tr("Left Widget"),splitterMain);
textLeft->setAlignment(Qt::AlignCenter);
//设定标题
splitterMain->setWindowTitle(QObject::tr("Splitter"));
splitterMain->show();
//MainWindow w;
//w.show();
return a.exec();
}
结果展示: