spark-store/inc/spkwindow.h
RigoLigoRLC f2e417e02a 更换SpkWindow基类为QWidget并修复多个问题
修复mResizable为false时阻止窗口移动的问题
更改About窗口为固定大小
2022-02-06 22:40:46 +08:00

68 lines
1.5 KiB
C++

//
// Created by rigoligo on 2021/5/8.
//
#pragma once
#include <QFrame>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLabel>
#include <QCloseEvent>
class SpkTitleBar;
class SpkWindow : public QWidget
{
Q_OBJECT
public:
enum SpkWindowStyle { Dark, Light };
static constexpr int BorderWidth = 7;
private:
QWidget *mUserCentralWidget;
QVBoxLayout *mMainVLayout;
SpkTitleBar *mTitleBarComponent;
int mCornerRadius;
bool mMoving, mResizing, mMaximized, mResizable;
Qt::Edges mEdgesBeingResized;
QPoint mMoveOffset;
bool (*mCloseHook)(void);
bool mUseCustomEvents;
public:
SpkWindow(QWidget *parent = nullptr);
~SpkWindow() override;
void SetCentralWidget(QWidget *);
bool GetUseTitleBar();
bool GetResizable() { return mResizable; }
void SetCloseHook(bool(*f)(void));
public slots:
void SetCornerRadius(int);
void SetUseTitleBar(bool);
void SetResizable(bool a) { mResizable = a; }
void SetCentralMargin(int, int, int, int);
void ClearCloseHook();
void RecalculateSize();
SpkTitleBar *GetTitleBar();
SpkTitleBar *SetTitleBar(SpkTitleBar*, bool replace = false);
signals:
void Closed();
protected:
bool event(QEvent *) override;
Qt::Edges DetectEdgeOnThis(QPoint);
void SetMouseCursor(Qt::Edges);
void ResizeWindowByCursor(QPoint);
void closeEvent(QCloseEvent *) override;
void paintEvent(QPaintEvent *) override;
private:
void PopulateUi();
void paintWindowBorder();
};