Qt QToolBar的get按钮由addAction添加

Stu*_*urm 3 c++ qt qtoolbar qpushbutton

在Qt中,当我们使用a的功能addActionQToolBar

_LastBar->addAction(QtExtensions::Action(name, icon, func));
Run Code Online (Sandbox Code Playgroud)

我们如何检索QToolButton为该动作生成的?

或者,如果不可能,如何找到的最后一个按钮/小部件QToolBar

Sch*_*eff 6

我发现以下方法听起来很有希望: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();
}
Run Code Online (Sandbox Code Playgroud)

testQToolBarAddAction.pro

#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();
}
Run Code Online (Sandbox Code Playgroud)

cygwin上编译和测试:

SOURCES = testQToolBarAddAction.cc

QT = widgets
Run Code Online (Sandbox Code Playgroud)

testQToolBarAddAction的快照

QToolButton返回相同的标签一样QAction-这应该算作证据。