QSplitter就是一个可以包含一些其他窗口部件的窗口部件。
在切分窗口(splitter)中的这些窗口部件会通过切分条(splitter handle)而分隔开来。用户可以通过拖动这些切分条来改变切分窗口中子窗口部件的大小。切分窗口常常可以用作布局管理器的替代品,从而可以把更多的控制权交给用户
头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class QSplitter;
class QCloseEvent;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
protected:
void closeEvent(QCloseEvent *event) override;
private:
void readSettings();
void writeSettings();
private:
QSplitter* splitter;
QSplitter* spl;
};
#endif // MAINWINDOW_H
源文件
#include "mainwindow.h"
#include <QSplitter>
#include <QTextEdit>
#include <QSettings>
#include <QCloseEvent>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
// setStyleSheet("background: LightSlateBlue");
// enum Orientation {
// Horizontal = 0x1,
// Vertical = 0x2
// };
splitter = new QSplitter(Qt::Horizontal,this);
setCentralWidget(splitter);
spl = new QSplitter(Qt::Vertical,this);
spl->addWidget(new QTextEdit("1"));
spl->addWidget(new QTextEdit("2"));
splitter->addWidget(new QTextEdit("3"));
splitter->addWidget(spl);
splitter->addWidget(new QTextEdit("4"));
splitter->setStretchFactor(0,1);
splitter->setStretchFactor(1,2);
splitter->setStretchFactor(2,1);
readSettings();
}
void MainWindow::readSettings()
{
QSettings settings("Software Inc.", "MainWindow Client");
settings.beginGroup("mainWindow");
restoreGeometry(settings.value("geometry").toByteArray());
splitter->restoreState(
settings.value("splitter").toByteArray());
spl->restoreState(
settings.value("spl").toByteArray());
settings.endGroup();
}
void MainWindow::writeSettings()
{
QSettings settings("Software Inc.", "MainWindow Client");
settings.beginGroup("mainWindow");
settings.setValue("geometry", saveGeometry());
settings.setValue("splitter", splitter->saveState());
settings.setValue("spl", spl->saveState());
settings.endGroup();
}
void MainWindow::closeEvent(QCloseEvent *event)
{
writeSettings();
event->accept();
}
MainWindow::~MainWindow()
{
}