Я пытаюсь добавить значок в свой QMenu с помощью Qt Designer, однако я понял, что мой текст исчезает, когда добавляется значок. Есть ли способ показать мне значок рядом с моим текстом?
Текст элемента QMenu исчезает при добавлении значка
Ответ 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, как вставлять пользовательские виджеты в панели инструментов и меню. Я никогда не использовал это сам в каком-либо серьезном проекте, но может быть полезно знать.