Я создал QToolButton, и метка будет включена, но похоже, что Qt их удаляет, верно?

Я использую следующий код: первая часть, создающая QToolButton, взята из Designer/moc, остальное я добавил.

// Moc part
QToolButton * f_tool_button = new QToolButton(bottom_grid);
f_tool_button->setObjectName(QStringLiteral("f_tool_button"));
f_tool_button->setText(QApplication::translate("MainWindow",
                                               "Tool Button...", 0));

// What I added
f_action = new QAction(this);
f_action->setObjectName(QStringLiteral("f_action"));
f_action->setText(QApplication::translate("MainWindow",
                                          "&Click...", 0));

f_menu.reset(new QMenu("Tool Button Menu ...", this));
f_menu->addAction(f_action);

f_tool_button->setDefaultAction(f_menu->menuAction());

Если я не позвоню setDefaultAction(), заголовок появится, как и ожидалось.

Когда я добавляю действие по умолчанию, метка, кажется, заменяется заголовком f_menu, "Меню кнопок инструментов..." (я намеренно поставил несколько другую метку). Но каким-то образом «...» удаляется из имени.

Любая идея об этой проблеме? Это особая функция Qt?


person Alexis Wilke    schedule 22.06.2018    source источник
comment
Не имеет отношения к вашей проблеме, но вы напрямую редактируете h-файл, созданный moc? Поскольку они генерируются автоматически, все изменения будут потеряны при следующем запуске moc.   -  person Bowdzone    schedule 22.06.2018
comment
Нет, я добавляю свой код в реализацию конструктора MainWindow. Это для того, чтобы показать весь соответствующий код в одном месте.   -  person Alexis Wilke    schedule 22.06.2018


Ответы (1)


QToolButton отображает текст из iconText элемента QAction (не text). text предназначен для использования в пунктах меню, тогда как iconText предназначен для отображения на панелях инструментов. Если не установлено, iconText является урезанной версией text.

Чтобы переопределить поведение по умолчанию, когда text генерируется iconText, вы можете установить желаемое iconText для своего QAction с помощью QAction::setIconText() (т. е. f_action->setIconText("Click..."); сразу после вызова f_action->setText).

person Mike    schedule 22.06.2018
comment
У меня проблема в f_menu, я думаю, я не совсем понял в своем вопросе, в каком из них отсутствует .... Текст QAction работает как положено. - person Alexis Wilke; 22.06.2018
comment
Однако выполнение f_tool_button->setText("Click..."); сразу после setDefaultAction() работает! - person Alexis Wilke; 22.06.2018
comment
@AlexisWilke, я думаю, вы просто хотели написать f_tool_button->setDefaultAction(f_menu->actions().at(0)); вместо последней строки в своем фрагменте кода. menuAction — это действие для всего меню, и вы, кажется, ищете action, которое вы только что добавили с помощью addAction... - person Mike; 22.06.2018
comment
Нет, я действительно хочу дополнительную маленькую кнопку справа с раскрывающимся дополнительным выбором. Это дает мне два варианта на одной и той же кнопке. - person Alexis Wilke; 23.06.2018
comment
@AlexisWilke, О, я неправильно вас понял, потому что обычно не добавляю QMenus к QToolBars так, как вы это делаете. Обычно я делаю что-то вроде этого. В любом случае, если вас беспокоят 3 точки в конце меню кнопок инструментов..., вам просто нужно установить iconText (как указано в моем ответе) на вашем menuAction(), прежде чем устанавливать его в качестве действия по умолчанию для QToolButton (т.е. f_menu->menuAction()->setIconText(f_menu->menuAction()->text());) . Надеюсь, что это работает для вас :) - person Mike; 23.06.2018
comment
Да! Это работает! И уж точно чище, чем мой предыдущий setText() после setDefaultAction(). - person Alexis Wilke; 24.06.2018