Текст элемента QMenu исчезает при добавлении значка

Я пытаюсь добавить значок в свой QMenu с помощью Qt Designer, однако я понял, что мой текст исчезает, когда добавляется значок. Есть ли способ показать мне значок рядом с моим текстом?

Ответ 1

В Qt 4 он не поддерживался, возможно, в Qt5 я не проверял. В самом Дизайнере вы не можете многое сделать. В коде один из вариантов заключается в настройке стиля для рисования значка и текста: - sizeFromContents для QStyle:: CT_MenuBarItem - drawControl для QStyle:: CE_MenuBarItem - drawCustomControl для QStyleOptionMenuItem

Ответ 2

Это не поддерживается по умолчанию, главным образом потому, что это не обычная операция, которую вы хотите достичь здесь. Конечно, вы всегда можете использовать изображение с включенным текстом, но это также хакерское, если вы не рисуете изображение динамически, а затем загружаете его позже. Хотя даже это будет довольно много работы.

Чтобы сделать это, вам нужно немного поиграть с Qt. Это самый близкий эксперимент, с которым я бы начал, лично. У меня не было времени проверить, действительно ли это работает, но должно быть что-то среди этих строк:

class CustomMenuBarWidget : public QWidget
{
public:
    explicit CustomMenuBarWidget(QWidget *parent = Q_NULLPTR)
        : QWidget(parent)
        , menuBar(new QMenuBar())
        {
        }

    virtual void paintEvent(QPaintEvent *event) {
        QStyleOptionMenuItem styleOptionMenuItem;
        QIcon icon("path/to/my/icon");
        styleOptionMenuItem.icon = icon;
        styleOptionMenuItem.text = "Hello World!";
        QPainter painter(this);
        menuBar->style()->drawControl(QStyle::CE_MenuBarItem, &styleOptionMenuItem, &painter, menuBar);
    }
private:
    QMenuBar *menuBar;
};

Возможно, вы также можете взглянуть на QWidgetAction, как вставлять пользовательские виджеты в панели инструментов и меню. Я никогда не использовал это сам в каком-либо серьезном проекте, но может быть полезно знать.