0

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

我试图覆盖eventeventfilter使用event->type == Qt::Tooltip但没有帮助。

请帮我。

4

1 回答 1

3

为什么会发生

在工具栏上添加操作时:

  1. 它创建了一个QToolButton
  2. 调用QToolButton::setDefaultAction将操作作为参数传递。
  3. 该方法调用setToolTip(action->toolTip());
  4. action->toolTip()返回tooltip工具提示是否为空,它返回text。因此,您将始终在按钮上有一些工具提示。

该怎么办

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

例如,何时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);
}
于 2014-12-02T08:27:13.457 回答