Qt QToolBar的get按钮由addAction添加

时间:2018-09-05 08:38:01

标签: c++ qt qpushbutton qtoolbar

在Qt中,当我们使用addAction的函数QToolBar时:

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

我们如何检索为此操作生成的QToolButton

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

1 个答案:

答案 0 :(得分:3)

我发现以下听起来不错的方法: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相同的标签-应该算作证明。