Skip to content

Commit

Permalink
合并master的修正
Browse files Browse the repository at this point in the history
  • Loading branch information
czyt1988 committed Jan 12, 2024
2 parents 31d91f6 + 07f7f31 commit a1e400d
Show file tree
Hide file tree
Showing 24 changed files with 554 additions and 138 deletions.
11 changes: 0 additions & 11 deletions SARibbonBar.pri
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,6 @@ INCLUDEPATH += $$PWD/src/SARibbonBar
DEPENDPATH += $$PWD/src/SARibbonBar


equals(QT_MAJOR_VERSION, 5){
greaterThan(QT_MINOR_VERSION, 13){
SA_RIBBON_CONFIG += use_frameless
}
}else{
# qt6.0不支持
greaterThan(QT_MINOR_VERSION, 0){
SA_RIBBON_CONFIG += use_frameless
}
}

contains( SA_RIBBON_CONFIG, use_frameless ) {
!contains(CONFIG,C++17){
CONFIG += c++17
Expand Down
14 changes: 14 additions & 0 deletions common.pri
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,17 @@ defineReplace(saRibbonLibNameMake) {
SARIBBON_SRC_DIR = $$PWD/src # 源代码路径
SARIBBONBAR_PRI_FILE_PATH = $$PWD/SARibbonBar.pri # 源代码路径
SARIBBON_LIB_NAME=$$saRibbonLibNameMake(SARibbonBar)

######################################
# Config | 配置
######################################
#SA_RIBBON_CONFIG 用于定义一些编译选项:
# SA_RIBBON_CONFIG+=use_frameless
# 此选项将使用frameless第三方库,这个选项在SARibbonBar.pri中会自动判断,如果,达到frameless的使用要求将会自动定义
# frameless第三方库必须C++17且只有几个版本的qt可用,目前支持(qt5.14,qt5.15,qt6.4以上)
# 除了上诉版本SA_RIBBON_CONFIG中不会加入use_frameless
# frameless库能实现Ubuntu下和mac下的显示,同时多屏幕的支持也较好
# 使用frameless库,需要定义QWindowKit的安装目录,默认在SARIBBON_BIN_DIR
# SA_RIBBON_QWindowKit_Install_DIR = $$SARIBBON_BIN_DIR
######################################
# SA_RIBBON_CONFIG += use_frameless
15 changes: 8 additions & 7 deletions src/SARibbonBar/SAFramelessHelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -349,9 +349,10 @@ bool SAPrivateFramelessWidgetData::handleMousePressEvent(QMouseEvent* event)
m_bLeftButtonTitlePressed = event->pos().y() < m_moveMousePos.m_nTitleHeight;

QRect frameRect = m_pWidget->frameGeometry();
m_pressedMousePos.recalculate(event->globalPos(), frameRect);
auto gp = SA_MOUSEEVENT_GLOBALPOS_POINT(event);
m_pressedMousePos.recalculate(gp, frameRect);

m_ptDragPos = event->globalPos() - frameRect.topLeft();
m_ptDragPos = gp - frameRect.topLeft();

if (m_pressedMousePos.m_bOnEdges) {
if (m_pWidget->isMaximized()) {
Expand Down Expand Up @@ -393,33 +394,33 @@ bool SAPrivateFramelessWidgetData::handleMouseReleaseEvent(QMouseEvent* event)

bool SAPrivateFramelessWidgetData::handleMouseMoveEvent(QMouseEvent* event)
{
QPoint p = SA_MOUSEEVENT_GLOBALPOS_POINT(event);
if (m_bLeftButtonPressed) {
if (d->m_bWidgetResizable && m_pressedMousePos.m_bOnEdges) {
if (m_pWidget->isMaximized()) {
//窗口在最大化状态时,点击边界不做任何处理
return (false);
}
resizeWidget(event->globalPos());
resizeWidget(p);
return (true);
} else if (d->m_bWidgetMovable && m_bLeftButtonTitlePressed) {
if (m_pWidget->isMaximized()) {
//先求出窗口到鼠标的相对位置
QRect normalGeometry = m_pWidget->normalGeometry();
m_pWidget->showNormal();
QPoint p = event->globalPos();
p.ry() -= 10;
p.rx() -= (normalGeometry.width() / 2);
m_pWidget->move(p);
//这时要重置m_ptDragPos
m_ptDragPos = QPoint(normalGeometry.width() / 2, 10);
return (true);
}
moveWidget(event->globalPos());
moveWidget(p);
return (true);
}
return (false);
} else if (d->m_bWidgetResizable) {
updateCursorShape(event->globalPos());
updateCursorShape(p);
}
return (false);
}
Expand All @@ -437,7 +438,7 @@ bool SAPrivateFramelessWidgetData::handleLeaveEvent(QEvent* event)
bool SAPrivateFramelessWidgetData::handleHoverMoveEvent(QHoverEvent* event)
{
if (d->m_bWidgetResizable) {
updateCursorShape(m_pWidget->mapToGlobal(event->pos()));
updateCursorShape(m_pWidget->mapToGlobal(SA_HOVEREVENT_POS_POINT(event)));
}
return (false);
}
Expand Down
8 changes: 4 additions & 4 deletions src/SARibbonBar/SARibbonBar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1663,8 +1663,8 @@ void SARibbonBar::setEnableUserDefineAccessBarIconSize(bool on)
if (!(d_ptr->mEnableUserDefineAccessBarIconSize)) { // 允许用户自定义AccessBar的IconSize就不进入此条件重置大小
// 变更iconsize
QSize btnIconSize = PrivateData::calcIconSizeByHeight(titleBarHeight());
if (btnIconSize != d_ptr->mQuickAccessBar->iconSize()) {
d_ptr->mQuickAccessBar->setIconSize(btnIconSize);
if (btnIconSize.height() != d_ptr->mQuickAccessBar->itemHeight()) {
d_ptr->mQuickAccessBar->setItemHeight(btnIconSize.height());
}
}
}
Expand Down Expand Up @@ -1693,8 +1693,8 @@ void SARibbonBar::setEnableUserDefineRightBarIconSize(bool on)
// 变更iconsize
if (!(d_ptr->mEnableUserDefineRightBarIconSize)) {
QSize btnIconSize = PrivateData::calcIconSizeByHeight(titleBarHeight());
if (btnIconSize != d_ptr->mRightButtonGroup->iconSize()) {
d_ptr->mRightButtonGroup->setIconSize(btnIconSize);
if (btnIconSize.height() != d_ptr->mRightButtonGroup->itemHeight()) {
d_ptr->mRightButtonGroup->setItemHeight(btnIconSize.height());
}
}
}
Expand Down
15 changes: 3 additions & 12 deletions src/SARibbonBar/SARibbonBar.pri
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,6 @@
# 2.要预定义FRAMELESSHELPER_CORE_LIBRARY宏,这样才能导出符号
# 3.要预定义FRAMELESSHELPER_WIDGETS_LIBRARY宏,这样才能导出符号

equals(QT_MAJOR_VERSION, 5){
greaterThan(QT_MINOR_VERSION, 13){
SA_RIBBON_CONFIG += use_frameless
}
}else{
# qt6.0不支持
greaterThan(QT_MINOR_VERSION, 0){
SA_RIBBON_CONFIG += use_frameless
}
}

contains( SA_RIBBON_CONFIG, use_frameless ) {
message("use frameless lib,compile with c+=17")
# 引入第三方库frameless后,必须要求c++17
Expand All @@ -30,7 +19,9 @@ contains( SA_RIBBON_CONFIG, use_frameless ) {
DEFINES += SARIBBON_USE_3RDPARTY_FRAMELESSHELPER=1
}else{
message("do not use_frameless lib,compile with c+=11")
CONFIG += c++11
!contains(CONFIG,C++14){
CONFIG += c++14
}
DEFINES += SARIBBON_USE_3RDPARTY_FRAMELESSHELPER=0
}
message("SA_RIBBON_CONFIG="$${SA_RIBBON_CONFIG})
Expand Down
63 changes: 38 additions & 25 deletions src/SARibbonBar/SARibbonButtonGroupWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,22 +40,21 @@ class SARibbonButtonGroupWidget::PrivateData

public:
QList< SAPrivateRibbonButtonGroupWidgetItem > mItems; ///< 用于记录所有管理的item
QSize mIconSize;
int mFixheight; ///内部控件的统一高度
int mItemMargin; ///间距
};

SARibbonButtonGroupWidget::PrivateData::PrivateData(SARibbonButtonGroupWidget* p) : q_ptr(p), mIconSize(18, 18)
SARibbonButtonGroupWidget::PrivateData::PrivateData(SARibbonButtonGroupWidget* p)
: q_ptr(p), mFixheight(20), mItemMargin(0)
{
}

void SARibbonButtonGroupWidget::PrivateData::init()
{
QHBoxLayout* layout = new QHBoxLayout(q_ptr);
//上下保留一点间隙
layout->setContentsMargins(0, 0, 0, 0);
layout->setContentsMargins(0, mItemMargin, 0, mItemMargin);
layout->setSpacing(0);
q_ptr->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
//默认尺寸24
mIconSize = QSize(24, 24);
}

//===================================================
Expand Down Expand Up @@ -176,26 +175,40 @@ QSize SARibbonButtonGroupWidget::minimumSizeHint() const
return (layout()->minimumSize());
}

/**
* @brief 设置icon尺寸
* @param s
*/
void SARibbonButtonGroupWidget::setIconSize(const QSize& s)
void SARibbonButtonGroupWidget::resizeEvent(QResizeEvent *event)
{
d_ptr->mIconSize = s;
// 迭代已经保存的button
const QObjectList& objlist = children();
for (QObject* obj : objlist) {
if (SARibbonControlToolButton* btn = qobject_cast< SARibbonControlToolButton* >(obj)) {
btn->setIconSize(s);
btn->setFixedHeight(s.height());
}
}
// int newH = geometry().size().height();
// setItemHeight(newH - 2 * d_ptr->mItemMargin);
QFrame::resizeEvent(event);
}

void SARibbonButtonGroupWidget::setItemHeight(int h)
{
d_ptr->mFixheight = h;
// 迭代已经保存的button
const QObjectList& objlist = children();
for (QObject* obj : objlist) {
if (SARibbonControlToolButton* btn = qobject_cast< SARibbonControlToolButton* >(obj)) {
btn->setFixedHeight(h);
btn->setMinimumWidth(h);
}
}
}

int SARibbonButtonGroupWidget::itemHeight() const
{
return d_ptr->mFixheight;
}

void SARibbonButtonGroupWidget::setItemMargin(int m)
{
d_ptr->mItemMargin = m;
layout()->setContentsMargins(0, m, 0, m);
}

QSize SARibbonButtonGroupWidget::iconSize() const
int SARibbonButtonGroupWidget::itemMargin() const
{
return d_ptr->mIconSize;
return d_ptr->mItemMargin;
}

/**
Expand All @@ -220,7 +233,7 @@ void SARibbonButtonGroupWidget::actionEvent(QActionEvent* e)
item.widget->setAttribute(Qt::WA_LayoutUsesWidgetRect);
item.widget->show();
//widget高度保持一致
item.widget->setFixedHeight(d_ptr->mIconSize.height());
item.widget->setFixedHeight(d_ptr->mFixheight);
item.customWidget = true;
}
} else if (item.action->isSeparator()) {
Expand All @@ -234,8 +247,8 @@ void SARibbonButtonGroupWidget::actionEvent(QActionEvent* e)
SARibbonToolButton::RibbonButtonType buttonType = SARibbonToolButton::SmallButton;
SARibbonControlToolButton* button = RibbonSubElementDelegate->createRibbonControlToolButton(this);
button->setAutoRaise(true);
button->setIconSize(d_ptr->mIconSize);
button->setFixedHeight(d_ptr->mIconSize.height());
button->setFixedHeight(d_ptr->mFixheight);
button->setMinimumWidth(d_ptr->mFixheight);
button->setFocusPolicy(Qt::NoFocus);
button->setButtonType(buttonType);
button->setDefaultAction(item.action);
Expand Down
13 changes: 10 additions & 3 deletions src/SARibbonBar/SARibbonButtonGroupWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,16 @@ class SA_RIBBON_EXPORT SARibbonButtonGroupWidget : public QFrame

QSize sizeHint() const Q_DECL_OVERRIDE;
QSize minimumSizeHint() const Q_DECL_OVERRIDE;
//设置icon尺寸
void setIconSize(const QSize& s);
QSize iconSize() const;
void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;

//设置内部控件高度
void setItemHeight(int h);
int itemHeight() const;

//上下margin
void setItemMargin(int m);
int itemMargin() const;

signals:

/**
Expand Down
6 changes: 6 additions & 0 deletions src/SARibbonBar/SARibbonCheckBox.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,9 @@ SARibbonCheckBox::SARibbonCheckBox(QWidget *parent)
: QCheckBox(parent)
{
}

SARibbonCheckBox::SARibbonCheckBox(const QString &text, QWidget *parent)
: QCheckBox(text, parent)
{

}
3 changes: 2 additions & 1 deletion src/SARibbonBar/SARibbonCheckBox.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ class SA_RIBBON_EXPORT SARibbonCheckBox : public QCheckBox
{
Q_OBJECT
public:
SARibbonCheckBox(QWidget *parent = Q_NULLPTR);
SARibbonCheckBox(QWidget *parent = Q_NULLPTR);
SARibbonCheckBox(const QString &text, QWidget *parent = Q_NULLPTR);
};

#endif // SARIBBONCHECKBOX_H
20 changes: 19 additions & 1 deletion src/SARibbonBar/SARibbonCustomizeDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,24 @@ void SARibbonCustomizeDialog::setupActionsManager(SARibbonActionsManager *mgr)
ui->customWidget->setupActionsManager(mgr);
}

/**
* @brief //判断用户是否有要存储的内容,对应save动作
* @return
*/
bool SARibbonCustomizeDialog::isApplied() const
{
return ui->customWidget->isApplied();
}

/**
* @brief 判断用户是否有改动内容,对应apply动作
* @return
*/
bool SARibbonCustomizeDialog::isCached() const
{
return ui->customWidget->isCached();
}


void SARibbonCustomizeDialog::initConnection()
{
Expand All @@ -93,7 +111,7 @@ void SARibbonCustomizeDialog::initConnection()
*/
bool SARibbonCustomizeDialog::applys()
{
return (ui->customWidget->applys());
return ui->customWidget->applys();
}


Expand Down
6 changes: 6 additions & 0 deletions src/SARibbonBar/SARibbonCustomizeDialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ class SA_RIBBON_EXPORT SARibbonCustomizeDialog : public QDialog
//设置action管理器
void setupActionsManager(SARibbonActionsManager *mgr);

//判断用户是否有要存储的内容,对应save动作
bool isApplied() const;

//判断用户是否有改动内容,对应apply动作
bool isCached() const;

//应用所有的设定
bool applys();

Expand Down
Loading

0 comments on commit a1e400d

Please sign in to comment.