从QMenu中删除图标空间

时间:2017-06-25 10:30:51

标签: c++ qt qt5 qt4 qmenu

我正在研究Qt应用程序(用C ++编写)。没有appyling任何样式,我的菜单看起来像这样:

enter image description here

我希望它看起来像这样:

enter image description here

我如何实现这一目标?使用qss还是以编程方式?

我已经尝试过这个,没有成功:

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

需要Qt4.8和Qt5的答案才能获得全额赏金!

2 个答案:

答案 0 :(得分:2)

解决问题的一种方法是使用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);

答案 1 :(得分:1)

您可以通过播放其样式表来影响菜单的显示方式。使用示例代码,您可以执行以下操作:

menu.setStyleSheet("QMenu::item {"
                   "padding: 2px 5px 2px 2px;"
                   "}"
                   "QMenu::item:selected {"
                   "background-color: rgb(0, 85, 127);"
                   "color: rgb(255, 255, 255);"
                   "}");

请注意padding属性,该属性设置菜单项矩形的偏移量。