1、代码实现分割窗口类QSplitter
应用举例:将一个窗口分割成三个子窗口组成,各个子窗口之间的大小可随意拖拽改变。
新建QMainWindow窗口,取消创建界面,在main.cpp中编写以下代码
#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); //(a) 水平分割窗口
QTextEdit *textLeft =new QTextEdit(QObject::tr("Left Widget"), splitterMain);//(b) 新建QTextEdit类对象并将其插入主分割窗口
textLeft->setAlignment(Qt::AlignCenter); //(c) 设置textLeft中文字的对齐方式为文字居中
//右部分分割窗口 //(d)
QSplitter *splitterRight =new QSplitter(Qt::Vertical,splitterMain);//右分割窗口,设定此分割窗口为垂直分割窗口,并以主分割窗口为父窗口
splitterRight->setOpaqueResize(false); //(e) 设定分割窗口的分割条在拖拽是是否为实时更新显示,true时实时显示
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);
splitterMain->setStretchFactor(1,1);//(f) 用于设定可伸缩控件。第一个参数指定设置控件的序号;第二个参数大于表示此控件可伸缩 对话窗口改变时左侧窗口随界面大小伸缩
splitterMain->setWindowTitle(QObject::tr("Splitter"));
splitterMain->show();
//MainWindow w;
//w.show();
return a.exec();
}
实现效果如下:
2、停靠窗口QDockWidget类
操作流程:
- 创建一个QDockWidget对象的停靠窗口
- 设置此停靠窗口的属性
- 新建一个要插入停靠窗体的控件
- 将控件插入停靠窗体
- 使用addDockWidget()方法在MainWidget中加入此停靠窗体
应用举例:一个窗口中创建三个停靠子窗口,窗口1只可在主窗口的左边和右边停靠;窗口2只可在浮动和右部停靠两种状态间切换,并且不可移动;窗口3可实现停靠窗口的各种工作状态。
按照1的方法新建一个工程,在函数的构造函数中编写以下代码
dockwindows.h文件不做修改
#include "dockwindows.h"
#include<QTextEdit>
#include<QDockWidget>
DockWindows::DockWindows(QWidget *parent)
: QMainWindow(parent)
{
setWindowTitle(tr("DockWindows")); //设置主窗口的标题栏文字
QTextEdit *te=new QTextEdit(this); //定义一个QTextEdit对象作为主窗口
te->setText(tr("Main Window"));
te->setAlignment(Qt::AlignCenter);
setCentralWidget(te); //将此编辑框设为主窗口的中央窗体
//停靠窗口1
QDockWidget *dock=new QDockWidget(tr("DockWindow1"),this);
//可移动
dock->setFeatures(QDockWidget::DockWidgetMovable); //(a)设置停靠窗口的特性
dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);//(b)设定停靠窗口可停靠的区域
QTextEdit *te1 =new QTextEdit();
te1->setText(tr("Window1,The dock widget can be moved between docks by the user" ""));
dock->setWidget(te1);
addDockWidget(Qt::RightDockWidgetArea,dock);
//停靠窗口2
dock=new QDockWidget(tr("DockWindow2"),this);
dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable); //可关闭、可浮动
QTextEdit *te2 =new QTextEdit();
te2->setText(tr("Window2,The dock widget can be detached from the main window,""and floated as an independent window, and can be closed"));
dock->setWidget(te2);
addDockWidget(Qt::RightDockWidgetArea,dock);
//停靠窗口3
dock=new QDockWidget(tr("DockWindow3"),this);
dock->setFeatures(QDockWidget::AllDockWidgetFeatures); //全部特性
QTextEdit *te3 =new QTextEdit();
te3->setText(tr("Window3,The dock widget can be closed, moved, and floated"));
dock->setWidget(te3);
addDockWidget(Qt::RightDockWidgetArea,dock);
}
实现效果:
3、堆叠窗口QStackedWidget类
应用举例:当选择左侧列表中不同的选项是,右侧显示所选的不同窗体。
创建一个类位QDialog的工程,取消“创建界面”
(1)头文件.h编写
#ifndef STACKDLG_H
#define STACKDLG_H
#include <QDialog>
#include <QListWidget>
#include <QStackedWidget>
#include <QLabel>
class StackDlg : public QDialog
{
Q_OBJECT
public:
StackDlg(QWidget *parent = 0);
~StackDlg();
private:
QListWidget *list;
QStackedWidget *stack;
QLabel *label1;
QLabel *label2;
QLabel *label3;
};
#endif // STACKDLG_H
(2).cpp文件编写
#include "stackdlg.h"
#include <QHBoxLayout>
StackDlg::StackDlg(QWidget *parent)
: QDialog(parent)
{
setWindowTitle(tr("StackedWidget"));
list =new QListWidget(this); //新建一个QListWidget控件对象
//在新建的QListWidget控件中插入三个条目,作为选择项
list->insertItem(0,tr("Window1"));
list->insertItem(1,tr("Window2"));
list->insertItem(2,tr("Window3"));
//创建三个QLabel标签控件对象,作为堆栈窗口需要显示的三层窗体
label1 =new QLabel(tr("WindowTest1"));
label2 =new QLabel(tr("WindowTest2"));
label3 =new QLabel(tr("WindowTest3"));
stack =new QStackedWidget(this);
//新建一个QStackedWidget堆栈窗体对象
//将创建的三个QLabel标签控件依次插入堆栈窗体中
stack->addWidget(label1);
stack->addWidget(label2);
stack->addWidget(label3);
QHBoxLayout *mainLayout =new QHBoxLayout(this);
//对整个对话框进行布局
mainLayout->setMargin(5); //设定对话框(或窗体)的边距为5
mainLayout->setSpacing(5); //设定各个控件之间的间距为5
mainLayout->addWidget(list);
mainLayout->addWidget(stack,0,Qt::AlignHCenter);
mainLayout->setStretchFactor(list,1);//(a) 设定可伸缩控件 第1个参数用于指定设置的控件;第二个参数大于0则此控件可伸缩
mainLayout->setStretchFactor(stack,3);
connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));//(b)
}