3

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

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

我们如何检索为该QToolButton操作生成的内容?

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

4

1 回答 1

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();
}

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这应该算作证明。

于 2018-09-05T08:58:38.430 回答