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.
QToolButton
возвращает тот же ярлык, что и QAction
- что должно считаться доказательством.