#ifndef SPLITVIEW_H #define SPLITVIEW_H #include "splitpanel.h" namespace SplitFrame { /** * @brief 分割视图 */ class SPLITVIEW_EXPORT SplitView : private QWidget, public SplitView { public: SplitView(RectCom *first, RectCom *next, QWidget *parent = nullptr); virtual ~SplitView(); // ViewRes interface public: virtual QWidget *bind() const override; virtual ViewPresent *viewPanel() const override; virtual void setParentRes(ViewRes *inst) override; virtual ViewRes *parentRes() const override; virtual void registElement(QWidget *child) override; virtual void pRelease() override; virtual void pClose() override; // RectCom interface public: virtual QRectF outline() const override; virtual void relayout(const QRectF &outline) override; virtual void paintEvent(QPaintEvent *ev) override; virtual bool contains(QWidget *) const override; virtual QString title() const override; virtual bool canReplace() const override; // SplitRect interface public: virtual std::pair child() const override; virtual void removeComp(RectCom *child) override; virtual void replaceComp(RectCom *view, RectCom *old) override; virtual float splitterWidth() const override; virtual float splitterPos() const override; virtual SplitType splitType() const override; virtual void setSplitInfo(SplitType type, float pos, float width, bool relayout) override; // QWidget interface protected: virtual void mousePressEvent(QMouseEvent *event) override; virtual void mouseReleaseEvent(QMouseEvent *event) override; virtual void mouseMoveEvent(QMouseEvent *event) override; virtual void resizeEvent(QResizeEvent *event) override; private: ViewRes *parent_inst; QList child_store; // type, pos, width std::tuple split_info_value; bool drags_state = false; virtual void relayout(); std::pair view_rects(); QRectF handle_rect() const; }; } // namespace SplitFrame #endif // SPLITVIEW_H