【问题标题】:QTooltip for QActions in QMenuQMenu 中用于 QActions 的 QTooltip
【发布时间】:2014-11-27 00:18:14
【问题描述】:

我希望能够显示 QMenu 项目 (QActions) 的工具提示。我取得的最好成绩是将QAction 的悬停信号连接到QTooltip 节目:

connect(action, &QAction::hovered, [=]{
    QToolTip::showText(QCursor::pos(), text, this);
});

问题是有时程序会将工具提示定位在菜单下方,特别是在更改菜单时。

有没有办法强制工具提示显示在顶部?

【问题讨论】:

    标签: c++ qt tooltip qmenu qaction


    【解决方案1】:

    从 Qt 5.1 开始,您可以使用 QMenu 的属性toolTipsVisible,默认设置为false

    请参阅related Qt suggestion

    【讨论】:

      【解决方案2】:

      您可以继承QMenu 并重新实现QMenu::event() 以拦截QEvent::ToolTip 事件并调用QToolTip::showText 来设置活动操作的工具提示:

      #include <QtGui>
      
      class Menu : public QMenu
      {
          Q_OBJECT
      public:
          Menu(){}
          bool event (QEvent * e)
          {
              const QHelpEvent *helpEvent = static_cast <QHelpEvent *>(e);
               if (helpEvent->type() == QEvent::ToolTip && activeAction() != 0) 
               {
                    QToolTip::showText(helpEvent->globalPos(), activeAction()->toolTip());
               } else 
               {
                    QToolTip::hideText();
               }
               return QMenu::event(e);
          }
      };
      

      现在您可以使用自定义菜单,例如:

      Menu *menu = new Menu();
      menu->setTitle("Test menu");
      menuBar()->addMenu(menu);
      
      QAction *action1 =  menu->addAction("First");
      action1->setToolTip("First action");
      
      QAction *action2 =  menu->addAction("Second");
      action2->setToolTip("Second action");
      

      【讨论】:

      • 这正是我想要的。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 2014-06-03
      • 2016-02-17
      • 1970-01-01
      相关资源
      最近更新 更多