#include "QtWidgetsApplication1.h" #include class CMenuStyle : public QProxyStyle { public: static constexpr int m_iconSize = 20; explicit CMenuStyle(bool bFromTouch = false, QStyle* style = nullptr) : m_bFromTouch(bFromTouch), QProxyStyle(style) {} explicit CMenuStyle(const QString& key) : QProxyStyle(key) {} ~CMenuStyle() override = default; void SetFromTouch(bool bSet) noexcept { m_bFromTouch = bSet; } static constexpr int GetIconSize(bool bForTouch = false) { return !bForTouch ? m_iconSize : 2 * m_iconSize; } int pixelMetric(QStyle::PixelMetric metric, const QStyleOption* option = nullptr, const QWidget* widget = nullptr) const override { switch (metric) { case QStyle::PM_SmallIconSize: return GetIconSize(m_bFromTouch); default: return QProxyStyle::pixelMetric(metric, option, widget); } } private: bool m_bFromTouch = false; }; QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); QMenuBar* mnuBar = menuBar(); QMenu* mnuFile = new QMenu(tr("File"), mnuBar); mnuFile->addAction("act1"); mnuFile->addAction("act2"); mnuBar->addMenu(mnuFile); CMenuStyle *mnuStyle = new CMenuStyle; mnuStyle->setParent(mnuFile); mnuFile->setStyle(mnuStyle); setStyleSheet("background-color: rgb(255, 170, 0);"); mnuBar->show(); } QtWidgetsApplication1::~QtWidgetsApplication1() {}