QSplitter QSplitterHandle implement custom custom splitter basic controls (two)

A, rendering
Here Insert Picture Description
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.

Published 30 original articles · won praise 1 · views 1137

Guess you like

Origin blog.csdn.net/u010906468/article/details/105001376