在Qt中,当我们使用QToolBar的函数QToolBar时
_LastBar->addAction(QtExtensions::Action(name, icon, func));我们如何检索为该操作生成的QToolButton?
或者,如果不可能,如何找到QToolBar的最后一个按钮/小部件
发布于 2018-09-05 08:58:38
我发现了以下听起来很有前途的方法: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相同的标签--这应该算作证据。
https://stackoverflow.com/questions/52180738
复制相似问题