将QAction添加到Qt中的QToolBar时删除QAction的工具提示

时间:2014-12-02 06:32:00

标签: qt tooltip qaction

我在QAction上添加了QToolBar,但我无法从按钮中删除工具提示。

我尝试使用event覆盖eventfilterevent->type == Qt::Tooltip,但它没有帮助。

请帮帮我。

1 个答案:

答案 0 :(得分:3)

为什么会发生

在工具栏上添加操作时:

  1. 创建QToolButton
  2. 调用QToolButton::setDefaultAction将操作作为参数传递。
  3. 此方法调用setToolTip(action->toolTip());
  4. action->toolTip()返回tooltip或工具提示是否为空,返回text。因此,按钮上总会有一些工具提示。
  5. 怎么做

    使用上面的解释,您可以想出很多方法来解决问题。

    例如,当QToolbar创建(并且可能显示)时,使用toolbar->findChildren<QToolButton*>来查找按钮:

    foreach(QToolButton* button, toolbar->findChildren<QToolButton*>())
    {
      button->setToolTip(QString());
    }
    

    注意:更改操作文本时,相应的按钮将重新创建工具提示。您可以使用按钮的事件过滤器来处理工具提示事件。

    编辑:添加了示例

    Ui包含一个带有操作的工具栏。

    testwindow::testwindow(QWidget *parent)
        : QMainWindow(parent)
    {
        ui.setupUi(this);
    
        foreach(QToolButton* button, ui.mainToolBar->findChildren<QToolButton*>())
        {
            button->setToolTip(QString());
        }
    }
    

    当您更改操作(文本,启用状态...)时,QToolButton会更新工具提示。在这种情况下,您需要永久防止工具提示外观:

    testwindow::testwindow(QWidget *parent)
        : QMainWindow(parent)
    {
        ui.setupUi(this);
    
        foreach(QToolButton* button, ui.mainToolBar->findChildren<QToolButton*>())
        {
            button->installEventFilter(this);
        }
    }
    
    bool testwindow::eventFilter(QObject* o, QEvent* e)
    {
        if (e->type() == QEvent::ToolTip)
        {
          return true;
        }
        return QMainWindow::eventFilter(o, e);
    }