diff --git a/frame/item/components/fullquickitem.cpp b/frame/item/components/fullquickitem.cpp index 014dab01c..406629bc5 100644 --- a/frame/item/components/fullquickitem.cpp +++ b/frame/item/components/fullquickitem.cpp @@ -36,6 +36,12 @@ FullQuickItem::~FullQuickItem() m_centerWidget->setParent(nullptr); } +void FullQuickItem::updateShow() +{ + if (m_centerWidget) + m_centerWidget->update(); +} + QuickSettingItem::QuickSettingType FullQuickItem::type() const { return QuickSettingItem::QuickSettingType::Full; diff --git a/frame/item/components/fullquickitem.h b/frame/item/components/fullquickitem.h index f734d313a..98b4795a9 100644 --- a/frame/item/components/fullquickitem.h +++ b/frame/item/components/fullquickitem.h @@ -30,6 +30,7 @@ class FullQuickItem : public QuickSettingItem public: FullQuickItem(PluginsItemInterface *const pluginInter, QWidget *parent = nullptr); ~FullQuickItem() override; + void updateShow() override; QuickSettingType type() const override; diff --git a/frame/item/components/multiquickitem.cpp b/frame/item/components/multiquickitem.cpp index 0f79438a2..e6eda1de2 100644 --- a/frame/item/components/multiquickitem.cpp +++ b/frame/item/components/multiquickitem.cpp @@ -33,7 +33,9 @@ static QSize expandSize = QSize(20, 20); MultiQuickItem::MultiQuickItem(PluginsItemInterface *const pluginInter, QWidget *parent) : QuickSettingItem(pluginInter, parent) - , m_selfDefine(false) + , m_iconWidget(nullptr) + , m_nameLabel(nullptr) + , m_stateLabel(nullptr) { initUi(); } @@ -45,6 +47,21 @@ MultiQuickItem::~MultiQuickItem() itemWidget->setParent(nullptr); } +void MultiQuickItem::updateShow() +{ + if (m_iconWidget && m_nameLabel && m_stateLabel) { + m_iconWidget->update(); + m_nameLabel->setText(QFontMetrics(m_nameLabel->font()).elidedText(pluginItem()->pluginDisplayName(), Qt::TextElideMode::ElideRight, m_nameLabel->width())); + m_stateLabel->setText(QFontMetrics(m_stateLabel->font()).elidedText(pluginItem()->description(), Qt::TextElideMode::ElideRight, m_stateLabel->width())); + } else { + QWidget *itemWidget = pluginItem()->itemWidget(QUICK_ITEM_KEY); + if (itemWidget) { + // 如果插件没有返回图标的显示,则获取插件的itemWidget + itemWidget->update(); + } + } +} + QuickSettingItem::QuickSettingType MultiQuickItem::type() const { return QuickSettingItem::QuickSettingType::Multi; @@ -52,7 +69,7 @@ QuickSettingItem::QuickSettingType MultiQuickItem::type() const bool MultiQuickItem::eventFilter(QObject *obj, QEvent *event) { - if (m_selfDefine) { + if (m_iconWidget) { if (event->type() == QEvent::MouseButtonRelease) { if (obj->objectName() == "expandLabel") { // 如果是鼠标的按下事件 @@ -75,9 +92,9 @@ bool MultiQuickItem::eventFilter(QObject *obj, QEvent *event) if (!labelWidget) return QuickSettingItem::eventFilter(obj, event); - if (labelWidget->objectName() == "nameLabel") { + if (labelWidget == m_nameLabel) { labelWidget->setText(QFontMetrics(labelWidget->font()).elidedText(pluginItem()->pluginDisplayName(), Qt::TextElideMode::ElideRight, labelWidget->width())); - } else if (labelWidget->objectName() == "stateLabel") { + } else if (labelWidget == m_stateLabel) { labelWidget->setText(QFontMetrics(labelWidget->font()).elidedText(pluginItem()->description(), Qt::TextElideMode::ElideRight, labelWidget->width())); } } @@ -111,38 +128,38 @@ void MultiQuickItem::initUi() iconLayout->setSpacing(0); iconLayout->setAlignment(Qt::AlignCenter); - QWidget *iconWidget = new QuickIconWidget(pluginItem(), itemKey(), iconWidgetParent); - iconWidget->setFixedSize(BGSIZE, BGSIZE); - iconLayout->addWidget(iconWidget); + m_iconWidget = new QuickIconWidget(pluginItem(), itemKey(), iconWidgetParent); + m_iconWidget->setFixedSize(BGSIZE, BGSIZE); + iconLayout->addWidget(m_iconWidget); mainLayout->addWidget(iconWidgetParent); mainLayout->addSpacing(10); // 添加中间的名称部分 QWidget *textWidget = new QWidget(this); - QLabel *nameLabel = new QLabel(textWidget); - QLabel *stateLabel = new QLabel(textWidget); - nameLabel->setObjectName("nameLabel"); - stateLabel->setObjectName("stateLabel"); + m_nameLabel = new QLabel(textWidget); + m_stateLabel = new QLabel(textWidget); + m_nameLabel->setObjectName("nameLabel"); + m_stateLabel->setObjectName("stateLabel"); // 设置图标和文字的属性 QFont nameFont = DFontSizeManager::instance()->t6(); nameFont.setBold(true); QPalette pe; pe.setColor(QPalette::WindowText, Qt::black); - nameLabel->setPalette(pe); - stateLabel->setPalette(pe); - nameLabel->setFont(nameFont); - stateLabel->setFont(DFontSizeManager::instance()->t10()); - nameLabel->setText(pluginItem()->pluginDisplayName()); - stateLabel->setText(pluginItem()->description()); - nameLabel->installEventFilter(this); - stateLabel->installEventFilter(this); + m_nameLabel->setPalette(pe); + m_stateLabel->setPalette(pe); + m_nameLabel->setFont(nameFont); + m_stateLabel->setFont(DFontSizeManager::instance()->t10()); + m_nameLabel->setText(pluginItem()->pluginDisplayName()); + m_stateLabel->setText(pluginItem()->description()); + m_nameLabel->installEventFilter(this); + m_stateLabel->installEventFilter(this); QVBoxLayout *textLayout = new QVBoxLayout(textWidget); textLayout->setContentsMargins(0, 0, 0, 0); textLayout->setSpacing(0); - textLayout->addWidget(nameLabel); - textLayout->addWidget(stateLabel); + textLayout->addWidget(m_nameLabel); + textLayout->addWidget(m_stateLabel); textLayout->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); mainLayout->addWidget(textWidget); @@ -160,7 +177,6 @@ void MultiQuickItem::initUi() pe.setBrush(QPalette::Window, Qt::transparent); expandLabel->setPalette(pe); mainLayout->addWidget(expandWidgetParent); - m_selfDefine = true; } } diff --git a/frame/item/components/multiquickitem.h b/frame/item/components/multiquickitem.h index 26e6b3b0d..0b03f8f29 100644 --- a/frame/item/components/multiquickitem.h +++ b/frame/item/components/multiquickitem.h @@ -23,6 +23,8 @@ #include +class QuickIconWidget; + class MultiQuickItem : public QuickSettingItem { Q_OBJECT @@ -30,6 +32,7 @@ class MultiQuickItem : public QuickSettingItem public: MultiQuickItem(PluginsItemInterface *const pluginInter, QWidget *parent = nullptr); ~MultiQuickItem() override; + void updateShow() override; QuickSettingType type() const override; @@ -41,7 +44,9 @@ private: QString expandFileName() const; private: - bool m_selfDefine; + QuickIconWidget *m_iconWidget; + QLabel *m_nameLabel; + QLabel *m_stateLabel; }; /** diff --git a/frame/item/components/singlequickitem.cpp b/frame/item/components/singlequickitem.cpp index 61b796bb4..c544a1fc0 100644 --- a/frame/item/components/singlequickitem.cpp +++ b/frame/item/components/singlequickitem.cpp @@ -58,15 +58,7 @@ void SingleQuickItem::mouseReleaseEvent(QMouseEvent *event) void SingleQuickItem::resizeEvent(QResizeEvent *event) { - if (property("paint").toBool()) { - QLabel *imageLabel = findChildLabel(this, "imageLabel"); - if (imageLabel) { - // 更新图像 - imageLabel->setPixmap(pixmap()); - } - updatePluginName(findChildLabel(this, "textLabel")); - } - + updateShow(); QuickSettingItem::resizeEvent(event); } @@ -181,3 +173,19 @@ void SingleQuickItem::updatePluginName(QLabel *textLabel) text = ftm.elidedText(text, Qt::TextElideMode::ElideRight, textLabel->width()); textLabel->setText(text); } + +void SingleQuickItem::updateShow() +{ + if (property("paint").toBool()) { + QLabel *imageLabel = findChildLabel(this, "imageLabel"); + if (imageLabel) { + // 更新图像 + imageLabel->setPixmap(pixmap()); + } + updatePluginName(findChildLabel(this, "textLabel")); + } else { + QWidget *itemWidget = pluginItem()->itemWidget(QUICK_ITEM_KEY); + if (itemWidget) + itemWidget->update(); + } +} diff --git a/frame/item/components/singlequickitem.h b/frame/item/components/singlequickitem.h index fad3f86a3..db6d862df 100644 --- a/frame/item/components/singlequickitem.h +++ b/frame/item/components/singlequickitem.h @@ -32,6 +32,7 @@ public: ~SingleQuickItem() override; QuickSettingType type() const override; + void updateShow() override; protected: void mouseReleaseEvent(QMouseEvent *event) override; diff --git a/frame/item/quicksettingitem.h b/frame/item/quicksettingitem.h index 962114883..4767a74e4 100644 --- a/frame/item/quicksettingitem.h +++ b/frame/item/quicksettingitem.h @@ -43,6 +43,7 @@ public: PluginsItemInterface *pluginItem() const; ItemType itemType() const override; virtual const QPixmap dragPixmap(); + virtual void updateShow() {} const QString itemKey() const; virtual QuickSettingType type() const = 0; diff --git a/frame/window/quicksettingcontainer.cpp b/frame/window/quicksettingcontainer.cpp index 660c541c7..8a62a2f11 100644 --- a/frame/window/quicksettingcontainer.cpp +++ b/frame/window/quicksettingcontainer.cpp @@ -452,7 +452,7 @@ void QuickSettingContainer::onPluginUpdated(PluginsItemInterface *itemInter, con if (settingItem->pluginItem() != itemInter) continue; - settingItem->update(); + settingItem->updateShow(); break; } }