Qt QToolBar кнопка добавления, добавленная addAction

В Qt, когда мы используем функцию addAction из QToolBar:

_LastBar->addAction(QtExtensions::Action(name, icon, func));

Как мы можем получить QToolButton создан для этого действия?

Или, если это невозможно, как найти последнюю кнопку / виджет QToolBar?

1 ответ

Решение

Я нашел следующий метод, который звучит многообещающе: QToolbar::widgetForAction(),

QToolbar::addAction() возвращает QAction* с указателем созданного QAction пример. Этот указатель используется с QToolbar::widgetForAction() и должен вернуть соответствующий QWidget*, Зная, что это должно быть QToolButton мы можем применить dynamic_cast<QToolButton*> который не должен потерпеть неудачу.

Чтобы проверить это, следующий MCVE testQToolBarAddAction.cc:

#include <QtWidgets>

int main(int argc, char **argv)
{
  qDebug() << "Qt Version:" << QT_VERSION_STR;
  QApplication app(argc, argv);
  QToolBar qToolBar;
  QAction *pQAction = qToolBar.addAction(
    "Click Me", [](bool) { qDebug() << "Clicked."; });
  QToolButton *pQToolBtn
    = dynamic_cast<QToolButton*>(qToolBar.widgetForAction(pQAction));
  qDebug() << "QToolbutton::label:" << pQToolBtn->text();
  qToolBar.show();
  return app.exec();
}

testQToolBarAddAction.pro:

SOURCES = testQToolBarAddAction.cc

QT = widgets

Скомпилировано и протестировано на Cygwin:

$ qmake-qt5 testQToolBarAddAction.pro

$ make

$ ./testQToolBarAddAction 
Qt Version: 5.9.4
QToolbutton::label: "Click Me"
Clicked.

снимок testQToolBarAddAction

QToolButton возвращает тот же ярлык, что и QAction - что должно считаться доказательством.

Другие вопросы по тегам