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



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

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

请帮助我。

为什么会发生

在工具栏上添加操作时:

  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);
}

最新更新