三种窗口实现及基本布局实现:

分割窗口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

停靠窗口设置流程:

  1. 创建一个QDockerWidget对象的停靠窗体。
  2. 设置此停靠窗体的属性,通常调用setFeatures()及setAllowedAreas()两种方法。
  3. 新建一个要插入停靠窗体的控件,常用的有QListWidget和QTextEdit;
  4. 将控件插入停靠窗体,调用QDockWidget的setWidget()方法;
  5. 使用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)));

基本布局

Qt-布局的实现

布局中常用的方法有:addWidget()和addLayout();

addWidget用于加入窗口,而addLayout()用于加入子布局。

相关文章: