Remove icon space from QMenu

后端 未结 2 1540
深忆病人
深忆病人 2021-01-05 07:12

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:

How do I a

相关标签:
2条回答
  • 2021-01-05 07:50

    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
    

    then you install it in the QApplication:

    QApplication a(argc, argv);
    QApplication::setStyle(new CustomStyle);
    
    0 讨论(0)
  • 2021-01-05 07:54

    You can influence on how your menu appears by playing with its style sheet. With you example code you can do the following:

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

    Note the padding property, which sets the offsets of your menu item rectangles.

    0 讨论(0)
提交回复
热议问题