Я использую QWidgetAction
, чтобы добавить заголовок в контекстное меню (которое также будет отображаться в Windows, независимо от того, какой стиль используется, в отличие от addSection()
, который не всегда отображает заголовок).Как изменить размер QLabel, отображаемый QWidgetAction после изменения его текста
Виджет действия - QLabel
. Это текст изменяется при каждом вызове контекстного меню. Меню настройки в конструкторе моего класса, и QWidgetAction
добавляется как так (все m_
переменные являются переменными члены, объявленные в заголовке):
m_contextMenu = new QMenu(this);
m_menuTitle = new QLabel;
m_menuTitle->setAlignment(Qt::AlignCenter);
m_menuTitle->setMargin(4);
QWidgetAction *titleAction = new QWidgetAction(m_contextMenu);
titleAction->setDefaultWidget(m_menuTitle);
m_contextMenu->addAction(titleAction);
m_contextMenu->addSeparator();
Когда меню запрашивается текст метки является изменилось и меню отображается следующим образом:
m_menuTitle->setText(tr("%1 „%2“").arg(some_variable, some_other_variable));
...
m_contextMenu->exec(place_to_display);
Когда текст лейбла устанавливается впервые (с коротким текстом текста лейбла установлен в), все в порядке:
но когда он установлен в какой-то длинного текста, размер остается неизменным, и текст обрезается:
Я попытался исправить это, но единственное рабочее решение, которое я нашел в том, чтобы определить QAction
s отображается в меню в конструкторе, принадлежащий this
, установив текст лейбла, очищая меню и снова добавлять действия, например, так:
m_contextMenu->clear();
m_menuTitle->setText(tr("%1 „%2“").arg(some_variable, some_other_variable));
m_contextMenu->addAction(m_menuTitleAction);
m_contextMenu->addSeparator();
m_contextMenu->addAction(m_editAction);
m_contextMenu->addAction(m_deleteAction);
m_contextMenu->exec(place_to_display);
есть ли способ изменить размер заголовка без каждый раз перестраивая меню?
QWidgetAction не имеет размера. Вам нужно изменить вопрос? Я бы хотел увидеть больше кода для этого. – AlexanderVX
Я добавил код настройки меню и вызова меню. Речь идет о ширине дисплеев QLabel QWidgetAction и ширине QMenu, которая остается неизменной после того, как текст QLabel установлен в первый раз. –
Ответ может быть выстрелом в темноте, но подобное решение сработало для меня один раз. – AlexanderVX