代码之家  ›  专栏  ›  技术社区  ›  Sturm

Qt QToolBar get按钮由addAction添加

  •  3
  • Sturm  · 技术社区  · 6 年前

    在Qt中使用函数时 addAction QToolBar :

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

    我们怎么才能找回 QToolButton 为那次行动准备的?

    或者,如果不可能,如何找到 ?

    1 回复  |  直到 6 年前
        1
  •  6
  •   Scheff's Cat    6 年前

    我发现以下方法听起来很有前途: QToolbar::widgetForAction()

    这个 QToolbar::addAction() 返回一个 QAction* QAction 实例。此指针用于 并应返回相应的 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

    这个 –这应该算是证据。

    推荐文章