三种窗口实现及基本布局实现:
分割窗口QSplitter
包含头文件
#include<QSplitter>
#include<QTextEdit>
布局实现
QSplitter* splitterMain= new QSplitter(Qt::Horizontal,0);
QTextEdit* textLeft=new QTextEdit(QObject::tr("Left Widget"),splitterMain);
textLeft->setAlignment(Qt::AlignHCenter);
QSplitter* splitterRight = new QSplitter(Qt::Vertical,splitterMain);
splitterRight->setOpaqueResize(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);
QSplitter* splitterCenter = new QSplitter(Qt::Vertical,splitterMain);
QTextEdit* textDown = new QTextEdit(QObject::tr("top widget"),splitterCenter);
textDown->setAlignment(Qt::AlignCenter);
splitterMain->setStretchFactor(2,1);
splitterMain->setWindowTitle(QObject::tr("Splitter"));
splitterMain->show();
停靠窗口QDockerWidget
堆栈窗体QStackedWidget
停靠窗口设置流程:
- 创建一个QDockerWidget对象的停靠窗体。
- 设置此停靠窗体的属性,通常调用setFeatures()及setAllowedAreas()两种方法。
- 新建一个要插入停靠窗体的控件,常用的有QListWidget和QTextEdit;
- 将控件插入停靠窗体,调用QDockWidget的setWidget()方法;
- 使用addDockWIdget()方法在mainWindow中加入此停靠窗体。
包含头文件:
#include<QLineEdit>
#include<QDockWidget>
布局实现:
setWindowTitle(QString("DockWidget"));
QLineEdit* edit = new QLineEdit(this);
edit->setText(QString("MainWindow"));
edit->setAlignment(Qt::AlignCenter);
setCentralWidget(edit);
QDockWidget* dock = new QDockWidget(tr("dockWindow1"),this);
dock->setFeatures(QDockWidget::DockWidgetMovable);
dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
QLineEdit* edit1 = new QLineEdit(this);
edit1->setText(QString("welcome to my world!"));
edit1->setAlignment(Qt::AlignRight);
dock->setWidget(edit1);
addDockWidget(Qt::LeftDockWidgetArea,dock);
dock = new QDockWidget(tr("dock2"),this);
dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable);
QLineEdit* edit2 = new QLineEdit(this);
edit2->setText(QString("welcome to my world! edit2"));
edit2->setAlignment(Qt::AlignRight);
dock->setWidget(edit2);
addDockWidget(Qt::LeftDockWidgetArea,dock);
dock = new QDockWidget(tr("dock3"),this);
dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable);
QLineEdit* edit3 = new QLineEdit(this);
edit3->setText(QString("welcome to my world! edit2"));
edit3->setAlignment(Qt::AlignRight);
dock->setWidget(edit3);
addDockWidget(Qt::LeftDockWidgetArea,dock);
dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::TopDockWidgetArea);
堆栈窗体QStackedWidget
包含头文件:
#include<QLabel>
#include<QListWidget>
#include<QStackedWidget>
#include<QHBoxLayout>
布局实现:
QLabel* m_label1;
QLabel* m_label2;
QLabel* m_label3;
QLabel* m_label4;
QListWidget* m_list;
QStackedWidget* m_layout;
setWindowTitle(tr("stackwidget"));
m_list = new QListWidget(this);
m_list->insertItem(0,tr("window1"));
m_list->insertItem(1,tr("window2"));
m_list->insertItem(2,tr("window3"));
m_label1 = new QLabel(tr("windows1"));
m_label2 = new QLabel(tr("windows2"));
m_label3 = new QLabel(tr("windows3"));
m_label4 = new QLabel(tr("windows4"));
m_layout = new QStackedWidget(this);
m_layout->addWidget(m_label1);
m_layout->addWidget(m_label2);
m_layout->addWidget(m_label3);
m_layout->addWidget(m_label4);
QHBoxLayout* layout = new QHBoxLayout(this);
layout->setMargin(1);
layout->setSpacing(1);
layout->addWidget(m_list);
layout->addWidget(m_layout,0,Qt::AlignHCenter);
layout->setStretchFactor(m_list,1);
layout->setStretchFactor(m_layout,1);
connect(m_list,SIGNAL(currentRowChanged(int)),m_layout,SLOT(setCurrentindex(int)));
基本布局
布局中常用的方法有:addWidget()和addLayout();
addWidget用于加入窗口,而addLayout()用于加入子布局。