Skip to content

Commit

Permalink
[临时提交]调整windwosButtonGroup
Browse files Browse the repository at this point in the history
  • Loading branch information
czyt1988 committed Jan 9, 2024
1 parent cdc8f74 commit 1d02bb1
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 106 deletions.
29 changes: 10 additions & 19 deletions src/SARibbonBar/SARibbonBar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -151,10 +151,7 @@ void SARibbonBar::PrivateData::init()
//
mStackedContainerWidget = RibbonSubElementFactory->createRibbonStackedWidget(q_ptr);
mStackedContainerWidget->setObjectName(QStringLiteral("objSARibbonStackedContainerWidget"));
mStackedContainerWidget->connect(mStackedContainerWidget,
&SARibbonStackedWidget::hidWindow,
q_ptr,
&SARibbonBar::onStackWidgetHided);
mStackedContainerWidget->connect(mStackedContainerWidget, &SARibbonStackedWidget::hidWindow, q_ptr, &SARibbonBar::onStackWidgetHided);
// 捕获事件,在popmode时必须用到
mStackedContainerWidget->installEventFilter(q_ptr);
//
Expand Down Expand Up @@ -229,11 +226,7 @@ int SARibbonBar::PrivateData::calcCategoryHeight()
* @param categoryHeight
* @return
*/
int SARibbonBar::PrivateData::calcMainBarHeight(int tabHegith,
int titleHeight,
int categoryHeight,
bool tabOnTitle,
SARibbonBar::RibbonMode rMode)
int SARibbonBar::PrivateData::calcMainBarHeight(int tabHegith, int titleHeight, int categoryHeight, bool tabOnTitle, SARibbonBar::RibbonMode rMode)
{
if (rMode == MinimumRibbonMode) {
// 最小模式,没有categoryHeight
Expand Down Expand Up @@ -509,7 +502,7 @@ QList< QColor > SARibbonBar::defaultContextCategoryColorList()
<< QColor(14, 81, 167) //
<< QColor(228, 0, 69) //
<< QColor(67, 148, 0) // 绿
;
;
return res;
}

Expand Down Expand Up @@ -1051,13 +1044,11 @@ void SARibbonBar::showMinimumModeButton(bool isShow)

d_ptr->mMinimumCategoryButtonAction = new QAction(this);
d_ptr->mMinimumCategoryButtonAction->setIcon(
style()->standardIcon(isMinimumMode() ? QStyle::SP_TitleBarUnshadeButton : QStyle::SP_TitleBarShadeButton,
nullptr));
style()->standardIcon(isMinimumMode() ? QStyle::SP_TitleBarUnshadeButton : QStyle::SP_TitleBarShadeButton, nullptr));
connect(d_ptr->mMinimumCategoryButtonAction, &QAction::triggered, this, [ this ]() {
this->setMinimumMode(!isMinimumMode());
this->d_ptr->mMinimumCategoryButtonAction->setIcon(
style()->standardIcon(isMinimumMode() ? QStyle::SP_TitleBarUnshadeButton : QStyle::SP_TitleBarShadeButton,
nullptr));
style()->standardIcon(isMinimumMode() ? QStyle::SP_TitleBarUnshadeButton : QStyle::SP_TitleBarShadeButton, nullptr));
});
d_ptr->mRightButtonGroup->addAction(d_ptr->mMinimumCategoryButtonAction);

Expand Down Expand Up @@ -1447,7 +1438,7 @@ void SARibbonBar::setRibbonStyle(SARibbonBar::RibbonStyles v)
<< "\n isTwoRowStyle=" << isTwoRowStyle() //
<< "\n isLooseStyle=" << isLooseStyle() //
<< "\n isCompactStyle=" << isCompactStyle() //
;
;
#endif
// 执行判断
setEnableWordWrap(isThreeRowStyle(v));
Expand Down Expand Up @@ -1930,6 +1921,7 @@ void SARibbonBar::showWindowButtonGroup(bool on)
d_ptr->mWindowButtonGroup->raise();
d_ptr->mWindowButtonGroup->show();
}
resizeAll();
}

/**
Expand Down Expand Up @@ -2117,11 +2109,10 @@ void SARibbonBar::paintInLooseStyle()
titleRegion.setRect(d_ptr->mQuickAccessBar->geometry().right() + 1,
border.top(),
width() - d_ptr->mIconRightBorderPosition - border.right()
- d_ptr->mWindowButtonSize.width() - d_ptr->mQuickAccessBar->geometry().right() - 1,
- d_ptr->mWindowButtonSize.width() - d_ptr->mQuickAccessBar->geometry().right() - 1,
titleBarHeight());
} else {
int leftwidth = contextCategoryRegion.x() - d_ptr->mQuickAccessBar->geometry().right()
- d_ptr->mIconRightBorderPosition;
int leftwidth = contextCategoryRegion.x() - d_ptr->mQuickAccessBar->geometry().right() - d_ptr->mIconRightBorderPosition;
int rightwidth = width() - contextCategoryRegion.y() - d_ptr->mWindowButtonSize.width();
// if (width() - contextCategoryRegion.y() > contextCategoryRegion.x()-x) {
if (rightwidth > leftwidth) {
Expand Down Expand Up @@ -2597,7 +2588,7 @@ QDebug operator<<(QDebug debug, const SARibbonBar& ribbon)
<< "\n -mEnableShowPannelTitle=" << ribbon.d_ptr->mEnableShowPannelTitle //
<< "\n -mWindowButtonSize=" << ribbon.d_ptr->mWindowButtonSize //
<< "\n -mIconRightBorderPosition=" << ribbon.d_ptr->mIconRightBorderPosition //
;
;

return debug;
}
Expand Down
109 changes: 30 additions & 79 deletions src/SARibbonBar/SAWindowButtonGroup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class SAWindowButtonGroup::PrivateData
int mCloseStretch { 4 };
int mMaxStretch { 3 };
int mMinStretch { 3 };
qreal mIconscale { 0.5 };
int mTitleBarHeight { 28 };
Qt::WindowFlags mFlags;
PrivateData(SAWindowButtonGroup* p) : q_ptr(p), mFlags(Qt::WindowFlags())
{
Expand Down Expand Up @@ -155,17 +155,17 @@ class SAWindowButtonGroup::PrivateData

QSize sizeHint() const
{
int width = 0;
int height = 30;

int height = mTitleBarHeight;
int btnWidth = mTitleBarHeight * 1.5;
int width(0);
if (buttonClose) {
width += 40;
width += btnWidth;
}
if (buttonMaximize) {
width += 30;
width += btnWidth;
}
if (buttonMinimize) {
width += 30;
width += btnWidth;
}
return (QSize(width, height));
}
Expand All @@ -185,9 +185,6 @@ SAWindowButtonGroup::SAWindowButtonGroup(QWidget* parent)
: QWidget(parent), d_ptr(new SAWindowButtonGroup::PrivateData(this))
{
updateWindowFlag();
if (parent) {
parent->installEventFilter(this);
}
}

/**
Expand All @@ -200,9 +197,6 @@ SAWindowButtonGroup::SAWindowButtonGroup(QWidget* parent, Qt::WindowFlags flags)
{
d_ptr->mFlags = flags;
updateWindowFlag();
if (parent) {
parent->installEventFilter(this);
}
}

SAWindowButtonGroup::~SAWindowButtonGroup()
Expand All @@ -226,15 +220,13 @@ void SAWindowButtonGroup::setupCloseButton(bool on)

void SAWindowButtonGroup::updateWindowFlag()
{
Qt::WindowFlags flags = parentWidget()->windowFlags();

d_ptr->mFlags = flags;

setupMinimizeButton(flags & Qt::WindowMinimizeButtonHint);

setupMaximizeButton(flags & Qt::WindowMaximizeButtonHint);

setupCloseButton(flags & Qt::WindowCloseButtonHint);
QWidget* topedWidget = this;
// 找到最顶层窗口
while (topedWidget->parentWidget()) {
topedWidget = topedWidget->parentWidget();
}
Qt::WindowFlags flags = topedWidget->windowFlags();
updateWindowFlag(flags);
}

/**
Expand All @@ -243,27 +235,9 @@ void SAWindowButtonGroup::updateWindowFlag()
*/
void SAWindowButtonGroup::updateWindowFlag(Qt::WindowFlags flags)
{
if (flags & Qt::WindowCloseButtonHint) {
d_ptr->mFlags |= Qt::WindowCloseButtonHint;
} else {
d_ptr->mFlags &= (~Qt::WindowCloseButtonHint);
}

if (flags & Qt::WindowMaximizeButtonHint) {
d_ptr->mFlags |= Qt::WindowMaximizeButtonHint;
} else {
d_ptr->mFlags &= (~Qt::WindowMaximizeButtonHint);
}

if (flags & Qt::WindowMinimizeButtonHint) {
d_ptr->mFlags |= Qt::WindowMinimizeButtonHint;
} else {
d_ptr->mFlags &= (~Qt::WindowMinimizeButtonHint);
}
d_ptr->mFlags = flags;
setupMinimizeButton(flags & Qt::WindowMinimizeButtonHint);

setupMaximizeButton(flags & Qt::WindowMaximizeButtonHint);

setupCloseButton(flags & Qt::WindowCloseButtonHint);
}

Expand All @@ -281,12 +255,23 @@ void SAWindowButtonGroup::setButtonWidthStretch(int close, int max, int min)
}

/**
* @brief 设置按钮的缩放比例
* @param iconscale 数值越小按钮越小
* @brief 标题栏高度
*
* 标题栏高度会影响sizeHint
* @param h
*/
void SAWindowButtonGroup::setIconScale(qreal iconscale)
void SAWindowButtonGroup::setTitleBarHeight(int h)
{
d_ptr->mIconscale = iconscale;
d_ptr->mTitleBarHeight = h;
}

/**
* @brief 标题栏高度
* @return
*/
int SAWindowButtonGroup::titleBarHeight() const
{
return d_ptr->mTitleBarHeight;
}

/**
Expand Down Expand Up @@ -329,40 +314,6 @@ QSize SAWindowButtonGroup::sizeHint() const
return (d_ptr->sizeHint());
}

bool SAWindowButtonGroup::eventFilter(QObject* watched, QEvent* e)
{
// 用于监听父窗口改变尺寸
if (watched == parentWidget()) {
switch (e->type()) {
case QEvent::Resize:
parentResize();
break;

default:
break;
}
}
return (false); // 不截断任何事件
}

void SAWindowButtonGroup::parentResize()
{
QWidget* par = parentWidget();
if (SARibbonMainWindow* rb = qobject_cast< SARibbonMainWindow* >(par)) {
if (SARibbonBar* bar = rb->ribbonBar()) {
// 先看看titlebar多高
if (height() != bar->titleBarHeight()) {
setFixedHeight(bar->titleBarHeight());
}
d_ptr->resize(QSize(width(), height()));
}
}
if (par) {
QSize parSize = par->size();
move(parSize.width() - width() - 1, 0);
}
}

void SAWindowButtonGroup::resizeEvent(QResizeEvent* e)
{
d_ptr->resize(e->size());
Expand Down
12 changes: 4 additions & 8 deletions src/SARibbonBar/SAWindowButtonGroup.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,26 +18,22 @@ class SA_RIBBON_EXPORT SAWindowButtonGroup : public QWidget
void setupMinimizeButton(bool on);
void setupMaximizeButton(bool on);
void setupCloseButton(bool on);
// 以最顶层的widget的WindowFlag作为WindowFlag
void updateWindowFlag();
void updateWindowFlag(Qt::WindowFlags flags);

// 设置按钮的宽度比例,最终按钮宽度将按照此比例进行设置
void setButtonWidthStretch(int close = 4, int max = 3, int min = 3);

// 设置按钮的缩放比例
void setIconScale(qreal iconscale = 0.5);

// 标题栏高度
void setTitleBarHeight(int h);
int titleBarHeight() const;
// 设置Qt::WindowStates
void setWindowStates(Qt::WindowStates s);

// 仅获取按钮的状态
Qt::WindowFlags windowButtonFlags() const;

virtual QSize sizeHint() const Q_DECL_OVERRIDE;

protected:
virtual bool eventFilter(QObject* watched, QEvent* e) Q_DECL_OVERRIDE;
virtual void parentResize();
virtual void resizeEvent(QResizeEvent* e) Q_DECL_OVERRIDE;

protected slots:
Expand Down

0 comments on commit 1d02bb1

Please sign in to comment.