[toc]
问题描述
右键托盘弹出菜单,这个菜单是是通过 QMenu
实现的,通过添加 QAction
实现了几个子项。后续 UI 优化,提出需要修改 Icon的大小,设置 Icon 的大小为 24*24
,遂进行了一番尝试,因影响颇多,暂且记录于此。
关于我这个右键托盘弹出选项框的肯定有别的方案,但是第一时间是想找一种比较简单的方案去实现,因此一直在搜索如何设置Icon大小的问题,目前看到的解决方案有以下几种:
- 通过设置
Style
实现
- 通过
QWidgetAction
实现
- 新建一个
Widget
,实现 QMenu
的效果
1 通过设置 Style,修改icon size
- 新建样式类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #pragma once
#include <QCommonStyle> #include <QStyleOption>
class QCustonIconStyle : public QCommonStyle { Q_OBJECT
public: QCustonIconStyle(int size) : QCommonStyle(), size_(size) {}
protected: int QCustonIconStyle::pixelMetric(PixelMetric metric, const QStyleOption* option, const QWidget* widget) const override {
if (metric == QStyle::PM_SmallIconSize) { return size_; }
#if 1 else if (metric == QStyle::PM_LayoutLeftMargin) { return 1; } else if (metric == QStyle::PM_MenuHMargin) { return 1; } else if (metric == QStyle::PM_LayoutHorizontalSpacing) { return 1; } #endif
return QCommonStyle::pixelMetric(metric, option, widget);
}
private: int size_; };
|
- 使用方法:
1 2
| QCustonIconStyle* style = new QCustonIconStyle(20); QMenu->setStyle(style);
|
-
遗留问题,使用该方法之后,QAction
的 horverd()
信号就不会触发了
关于这个问题的解决方法也很简单,尝试了一天,最终选择继承重写 QProxyStyle
就能解决这个问题。
1 2 3 4
| action_ = new QPushButton(menu); QWidgetAction* action = new QWidgetAction(this); action->setDefaultWidget(action_ ); menu->addAction(action);
|
3 新建界面