Skip to content

QAction Icon 大小问题 #28

@holdyounger

Description

@holdyounger

QAction Icon 大小问题

[toc]

问题描述

> 右键托盘弹出菜单,这个菜单是是通过 QMenu 实现的,通过添加 QAction 实现了几个子项。后续 UI 优化,提出需要修改 Icon的大小,设置 Icon 的大小为 24*24,遂进行了一番尝试,因影响颇多,暂且记录于此。

关于我这个右键托盘弹出选项框的肯定有别的方案,但是第一时间是想找一种比较简单的方案去实现,因此一直在搜索如何设置Icon大小的问题,目前看到的解决方案有以下几种:

  1. 通过设置 Style 实现
  2. 通过 QWidgetAction 实现
  3. 新建一个 Widget,实现 QMenu 的效果

1 通过设置 Style,修改icon size

  1. 新建样式类
#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_;
};
  1. 使用方法:
	QCustonIconStyle* style = new QCustonIconStyle(20);
	QMenu->setStyle(style);
  1. 遗留问题,使用该方法之后,QActionhorverd() 信号就不会触发了

    > 关于这个问题的解决方法也很简单,尝试了一天,最终选择继承重写 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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions