1
0
mirror of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System.git synced 2025-03-16 02:59:51 +08:00

Addes support for setting DockWidgetTab icon size via stylesheet

This commit is contained in:
Uwe Kindler 2020-10-31 13:56:16 +01:00
parent f6d3d6d34a
commit aedbaec497
3 changed files with 55 additions and 6 deletions

View File

@ -51,7 +51,6 @@
#include "DockManager.h" #include "DockManager.h"
#include "IconProvider.h" #include "IconProvider.h"
#include <iostream>
namespace ads namespace ads
{ {
@ -77,6 +76,7 @@ struct DockWidgetTabPrivate
QAbstractButton* CloseButton = nullptr; QAbstractButton* CloseButton = nullptr;
QSpacerItem* IconTextSpacer; QSpacerItem* IconTextSpacer;
QPoint TabDragStartPosition; QPoint TabDragStartPosition;
QSize IconSize;
/** /**
* Private data constructor * Private data constructor
@ -186,6 +186,27 @@ struct DockWidgetTabPrivate
DragStartMousePosition = _this->mapFromGlobal(GlobalPos); DragStartMousePosition = _this->mapFromGlobal(GlobalPos);
} }
/**
* Update the icon in case the icon size changed
*/
void updateIcon()
{
if (!IconLabel || Icon.isNull())
{
return;
}
if (IconSize.isValid())
{
IconLabel->setPixmap(Icon.pixmap(IconSize));
}
else
{
IconLabel->setPixmap(Icon.pixmap(_this->style()->pixelMetric(QStyle::PM_SmallIconSize, nullptr, _this)));
}
IconLabel->setVisible(true);
}
}; };
// struct DockWidgetTabPrivate // struct DockWidgetTabPrivate
@ -570,11 +591,7 @@ void CDockWidgetTab::setIcon(const QIcon& Icon)
} }
d->Icon = Icon; d->Icon = Icon;
if (d->IconLabel) d->updateIcon();
{
d->IconLabel->setPixmap(Icon.pixmap(style()->pixelMetric(QStyle::PM_SmallIconSize, nullptr, this)));
d->IconLabel->setVisible(true);
}
} }
@ -688,6 +705,21 @@ void CDockWidgetTab::updateStyle()
} }
//============================================================================
QSize CDockWidgetTab::iconSize() const
{
return d->IconSize;
}
//============================================================================
void CDockWidgetTab::setIconSize(const QSize& Size)
{
d->IconSize = Size;
d->updateIcon();
}
} // namespace ads } // namespace ads

View File

@ -31,6 +31,7 @@
// INCLUDES // INCLUDES
//============================================================================ //============================================================================
#include <QFrame> #include <QFrame>
#include <QSize>
#include "ads_globals.h" #include "ads_globals.h"
@ -50,6 +51,7 @@ class ADS_EXPORT CDockWidgetTab : public QFrame
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(bool activeTab READ isActiveTab WRITE setActiveTab NOTIFY activeTabChanged) Q_PROPERTY(bool activeTab READ isActiveTab WRITE setActiveTab NOTIFY activeTabChanged)
Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize)
private: private:
DockWidgetTabPrivate* d; ///< private data (pimpl) DockWidgetTabPrivate* d; ///< private data (pimpl)
@ -159,6 +161,20 @@ public:
*/ */
void updateStyle(); void updateStyle();
/**
* Returns the icon size.
* If no explicit icon size has been set, the function returns an invalid
* QSize
*/
QSize iconSize() const;
/**
* Set an explicit icon size.
* If no icon size has been set explicitely, than the tab sets the icon size
* depending on the style
*/
void setIconSize(const QSize& Size);
public slots: public slots:
virtual void setVisible(bool visible) override; virtual void setVisible(bool visible) override;

View File

@ -16,6 +16,7 @@ ads--CDockWidgetTab {
border-style: solid; border-style: solid;
border-width: 0 1px 0 0; border-width: 0 1px 0 0;
padding: 0 0px; padding: 0 0px;
qproperty-iconSize: 16px 16px;/* this is optional in case you would like to change icon size*/
} }
ads--CDockWidgetTab[activeTab="true"] { ads--CDockWidgetTab[activeTab="true"] {