c++ - Qt QToolBar get按钮添加addAction

标签 c++ qt qpushbutton qtoolbar

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

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

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

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

最佳答案

我发现以下方法听起来很有希望: 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 相同的标签– 这应该算作证据。

关于c++ - Qt QToolBar get按钮添加addAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52180738/

相关文章:

c++ - 为什么 opencv 使用输出参数,而不是只返回输出?

c++ - 从 mex 访问 Matlab 结构

c++ - AdHoc 网络库 Linux

c++ - Qt shutdown() 不适用于已部署的应用程序

c++ - Qt 4 : How implement a "Go" button to the QWebView

python - 使用 Pyqt5 为按钮添加功能

c++ - C1202 : recursive type or function dependency context too complex

java - 如果 jvm 的参数是从其他类型转换过来的,jni 找不到类

qt - GUI内部结构,寻找教程

Qt keyPressEvent、 "Hold"和 keyReleaseEvent 处理按钮/鼠标点击