A, rendering
two code
#ifndef SPLITERWIDGET_H
#define SPLITERWIDGET_H
#include <QObject>
#include <QTextEdit>
#include <QWidget>
#include <QDebug>
#include <QSplitter>
#include <QSplitterHandle>
#include <QHBoxLayout>
#include <QVBoxLayout>
class HspliterHandler : public QSplitterHandle
{
Q_OBJECT
public:
explicit HspliterHandler(Qt::Orientation o, QSplitter *parent);
};
class Hspliter : public QSplitter
{
Q_OBJECT
public:
explicit Hspliter(Qt::Orientation o, QWidget* parent = nullptr);
protected:
virtual HspliterHandler *createHandle();
};
class SpliterWidget : public QWidget
{
Q_OBJECT
public:
SpliterWidget();
};
#endif // SPLITERWIDGET_H
#include "spliterwidget.h"
SpliterWidget::SpliterWidget()
{
QTextEdit *pLeftEdit = new QTextEdit("left",this);
QTextEdit *pTopEdit = new QTextEdit("top",this);
QTextEdit *pBottomEdit = new QTextEdit("bottom",this);
Hspliter *mainSpliter = new Hspliter(Qt::Horizontal,this);
Hspliter *rightSpliter = new Hspliter(Qt::Vertical,this);
mainSpliter->addWidget(pLeftEdit);
mainSpliter->addWidget(rightSpliter);
rightSpliter->addWidget(pTopEdit);
rightSpliter->addWidget(pBottomEdit);
QHBoxLayout *hlayout = new QHBoxLayout(this);
hlayout->addWidget(mainSpliter);
resize(400,300);
mainSpliter->setStretchFactor(0,1);
mainSpliter->setStretchFactor(1,3);
}
HspliterHandler::HspliterHandler(Qt::Orientation o, QSplitter *parent):
QSplitterHandle(o,parent)
{
}
Hspliter::Hspliter(Qt::Orientation o, QWidget *parent):
QSplitter(o,parent)
{
}
HspliterHandler *Hspliter::createHandle()
{
HspliterHandler *ph = new HspliterHandler(orientation(),this);
ph->setMinimumSize(3,3);
return ph;
}
III Summary
1. the class Q_WIDGETS_EXPORT QSplitter: public QFrame seen, the QSplitter essentially only one component of the container. After the addition of the container member, will be automatically added on the left side a splitter QSplitterHandle member.
2. subclass QSplitter, the key point is rewritable virtual HspliterHandler * createHandle (); QSplitterHandle member of transformation.