Qt QToolBar кнопка добавления, добавленная addAction - PullRequest
0 голосов
/ 05 сентября 2018

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

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

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

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

1 Ответ

0 голосов
/ 05 сентября 2018

Я нашел следующий метод, который звучит многообещающе: 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.

snapshot of testQToolBarAddAction

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

...