#ifndef BASEVIEW_H #define BASEVIEW_H #include "splitpanel.h" #include #include #include #include namespace SplitFrame { class BaseView; /** * @brief 视图拖拽标题栏 */ class DragHeader : public QFrame { public: DragHeader(BaseView *bind); void setIcon(const QIcon &icon); QIcon icon() const; void setText(const QString &title); QString text() const; private: QIcon icon_inst; QLabel *const icon_store, *const title_store; BaseView *const view_core; std::tuple press_flag = std::make_tuple(false, QPointF()); // QWidget interface protected: virtual void mousePressEvent(QMouseEvent *event) override; virtual void mouseReleaseEvent(QMouseEvent *event) override; virtual void mouseMoveEvent(QMouseEvent *event) override; }; /** * @brief 基础内容视图组件 */ class SPLITVIEW_EXPORT BaseView : private QWidget, public RectCom { friend class ViewPresent; public: BaseView(const QString &title, QWidget *view, bool empty = false, bool replaceable = false, QWidget *parent = nullptr); virtual ~BaseView(); virtual void setTitle(const QString &title); virtual QString title() const override; virtual void setIcon(const QIcon &icon); virtual QIcon viewIcon() const; virtual bool canReplace() const override; virtual bool contains(QWidget *inst) const override; // ViewRes interface public: virtual ViewPresent *viewPanel() const override; virtual void setParentRes(ViewRes *inst) override; virtual ViewRes *parentRes() const override; virtual void pRelease() override; virtual void pClose() override; virtual void registElement(QWidget *child) override; // RectCom interface public: virtual QWidget *bind() const override; virtual QRectF outline() const override; virtual void relayout(const QRectF &outline) override; virtual void paintEvent(QPaintEvent *ev) override; private: bool replace_able; QIcon icon_store; QString title_store; DragHeader *title_header; ViewRes *parent_store; QList comps_list; protected: virtual void installPerceptionHandle(ViewPresent *obj); }; } // namespace SplitFrame #endif // BASEVIEW_H