从QMenu删除图标空间 [英] Remove icon space from QMenu

查看:357
本文介绍了从QMenu删除图标空间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在研究Qt应用程序(在C ++中).在不添加任何样式的情况下,我的菜单如下所示:

I'm working on a Qt application (in C++). Without appyling any styles, my menu looks like this:

我希望它看起来像这样:

I'd like it to look like this:

我该如何实现?是使用qss还是以编程方式?

How do I achieve this? Either using qss, or programmatically?

我已经尝试过了,但没有成功:

I already tried this, without success:

    menu->addAction(tr("Add"), this, SLOT(CreateNewWaypoint()))->setIconVisibleInMenu(false);

Qt4.8和Qt5的答案都需要得到完整的赏金!

Answers for both Qt4.8 and Qt5 are needed to get the full bounty!

推荐答案

解决问题的一种方法是使用QProxyStyle:

One way to solve the problem is to use QProxyStyle:

customstyle.h

#ifndef CUSTOMSTYLE_H
#define CUSTOMSTYLE_H
#include <QProxyStyle>
#include <QStyleOptionMenuItem>

class CustomStyle : public QProxyStyle{
public:
    using QProxyStyle::QProxyStyle;

    void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w) const override
    {
        if(element == QStyle::CE_MenuItem){
            QStyleOptionMenuItem myMenuOption;
            const QStyleOptionMenuItem *menuOption =
                    qstyleoption_cast<const QStyleOptionMenuItem *>(opt);
            if (menuOption) {
                const int width = pixelMetric(PM_SmallIconSize)+6;
                myMenuOption = *menuOption;
                QRect r(myMenuOption.rect);
                r.setLeft(-width);
                myMenuOption.rect = r;
            }
            QProxyStyle::drawControl(element, &myMenuOption, p, w);
            return;
        }
        QProxyStyle::drawControl(element, opt, p, w);
    }
};

#endif // CUSTOMSTYLE_H

然后将其安装在QApplication中:

QApplication a(argc, argv);
QApplication::setStyle(new CustomStyle);

这篇关于从QMenu删除图标空间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆