-
Notifications
You must be signed in to change notification settings - Fork 4
Open
Description
QAction Icon 大小问题
[toc]
问题描述
> 右键托盘弹出菜单,这个菜单是是通过 QMenu 实现的,通过添加 QAction 实现了几个子项。后续 UI 优化,提出需要修改 Icon的大小,设置 Icon 的大小为 24*24,遂进行了一番尝试,因影响颇多,暂且记录于此。
关于我这个右键托盘弹出选项框的肯定有别的方案,但是第一时间是想找一种比较简单的方案去实现,因此一直在搜索如何设置Icon大小的问题,目前看到的解决方案有以下几种:
- 通过设置
Style实现 - 通过
QWidgetAction实现 - 新建一个
Widget,实现QMenu的效果
1 通过设置 Style,修改icon size
- 新建样式类
#pragma once
#include <QCommonStyle>
#include <QStyleOption>
// 自定义一个style类,通过setStyle设置给menu,以此设置iconsize
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
// 一下内容是我尝试修改UI的,改了size之后会导致icon移位,需要修改间距和边距
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_;
};- 使用方法:
QCustonIconStyle* style = new QCustonIconStyle(20);
QMenu->setStyle(style);-
遗留问题,使用该方法之后,
QAction的horverd()信号就不会触发了> 关于这个问题的解决方法也很简单,尝试了一天,最终选择继承重写
QProxyStyle就能解决这个问题。
2 使用 QWidgetAction
action_ = new QPushButton(menu);
QWidgetAction* action = new QWidgetAction(this);
action->setDefaultWidget(action_ );
menu->addAction(action);3 新建界面
blog link [QAction Icon 大小问题](https://holdyounger.github.io/Code/Qt/QAction Icon 大小/)
Metadata
Metadata
Assignees
Labels
No labels