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

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

12

Решение

Это не было поддержано в Qt 4, может быть, в Qt5 я не проверял.
В самом Designer мало что можно сделать. В коде одним из вариантов является настройка стиля для рисования как значка, так и текста:
— 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 как вставить пользовательские виджеты в панели инструментов и меню. Я никогда не использовал это сам в любом серьезном проекте, но, возможно, было бы полезно знать об этом.

0

По вопросам рекламы [email protected]