首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在qt中包含菜单项的工具提示

如何在qt中包含菜单项的工具提示
EN

Stack Overflow用户
提问于 2020-03-01 23:05:00
回答 1查看 883关注 0票数 5

我试图使用工具属性在MenuBar项上添加MenuBar,但是它没有工作.但在标签、按钮和其他小部件上,它似乎运行得很好。有人能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-02 00:57:18

由于缺乏MCVE,我准备了自己的操作系统,并能够复制OP的问题。(我用Windows/Qt 2017/QT5.13和cygwin/X11/QT5.9进行了测试。)

在研究网络时,我在Qt论坛上发现了类似的问答:

(已解决) setToolTip在QAction菜单中的应用

由于我已经有了一个MCVE,我尝试了这个解决方案,并使它工作(在Windows/ As 2017/QT5.13中)。

testQMenuBarToolTip.cc

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Qt header:
#include <QtWidgets>

/// menu bar with tooltips
class MenuBar: public QMenuBar {
  public:
    explicit MenuBar(QWidget *pQParent = nullptr): QMenuBar(pQParent) { }
    virtual ~MenuBar() = default;
    MenuBar(const MenuBar&) = delete;
    MenuBar& operator=(const MenuBar&) = delete;

  protected:
    virtual bool event(QEvent *pQEvent) override;
};

bool MenuBar::event(QEvent *pQEvent)
{
  // keep behavior of base class
  bool ret = QMenuBar::event(pQEvent);
  // check whether this is a help event
  if (pQEvent->type() == QEvent::ToolTip) {
    const QHelpEvent *const pQHelpEvent = (const QHelpEvent*)pQEvent;
    const QAction *pQAction = activeAction();
    if (pQAction && !pQAction->toolTip().isEmpty()) {
      QToolTip::showText(pQHelpEvent->globalPos(), pQAction->toolTip());
      return ret;
    }
  }
  QToolTip::hideText();
  return ret;
}

/// menu with tooltips
class Menu: public QMenu {
  public:
    explicit Menu(const QString &title, QWidget *pQParent = nullptr):
      QMenu(title, pQParent)
    { }
    explicit Menu(QWidget *pQParent = nullptr): QMenu(pQParent) { }
    virtual ~Menu() = default;
    Menu(const Menu&) = delete;
    Menu& operator=(const Menu&) = delete;

  protected:
    virtual bool event(QEvent *pQEvent) override;
};

bool Menu::event(QEvent *pQEvent)
{
  // keep behavior of base class
  bool ret = QMenu::event(pQEvent);
  // check whether this is a help event
  if (pQEvent->type() == QEvent::ToolTip) {
    const QHelpEvent *const pQHelpEvent = (const QHelpEvent*)pQEvent;
    const QAction *pQAction = activeAction();
    if (pQAction && !pQAction->toolTip().isEmpty()) {
      QToolTip::showText(pQHelpEvent->globalPos(), pQAction->toolTip());
      return ret;
    }
  }
  QToolTip::hideText();
  return ret;
}

// main application
int main(int argc, char **argv)
{
  qDebug() << "Qt Version:" << QT_VERSION_STR;
  QApplication app(argc, argv);
  // setup GUI
  QMainWindow qWinMain;
  qWinMain.resize(320, 240);
  qWinMain.setWindowTitle("Test QMenuBar with ToolTips");
  MenuBar qMenuBar;
  QAction qCmdFile("File");
  qCmdFile.setToolTip("provides file commands.");
  Menu qMenuFile;
  QAction qCmdExit("Quit");
  qCmdExit.setToolTip("closes application.");
  qMenuFile.addAction(&qCmdExit);
  qCmdFile.setMenu(&qMenuFile);
  qMenuBar.addAction(&qCmdFile);
  qWinMain.setMenuBar(&qMenuBar);
#if 0 // comparison with toolbar
  QToolBar qToolBar;
  qToolBar.addAction(&qCmdExit);
  qWinMain.addToolBar(&qToolBar);
#endif // 0
  qWinMain.show();
  // runtime loop
  return app.exec();
}

testQMenuBarToolTip.pro

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SOURCES = testQMenuBarToolTips.cc

QT += widgets

输出:(Windows 10,VS2017,QT5.13)

cygwin64中构建并测试了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ qmake-qt5 

$ make && ./testQMenuBarToolTips
g++ -c -fno-keep-inline-dllexport -D_GNU_SOURCE -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtWidgets -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtCore -I. -I/usr/lib/qt5/mkspecs/cygwin-g++ -o testQMenuBarToolTips.o testQMenuBarToolTips.cc
g++  -o testQMenuBarToolTips.exe testQMenuBarToolTips.o   -lQt5Widgets -lQt5Gui -lQt5Core -lGL -lpthread 
Qt Version: 5.9.4

输出:(cygwin64,X11,g++,QT5.9)

备注:

  • 我对复制的答案进行了一些微调(例如添加缺失的返回语句)。
  • 当我摆弄我的样本时,我意识到了子菜单和复制/粘贴的问题,也为QMenu编写了解决方案。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60484006

复制
相关文章
如何在 iOS 的源码中包含图片?
通过添加这个开源库,笔者 80% 的调试工作都可以用这个库完成,而无需 Xcode 工具。
酷酷的哀殿
2020/10/26
1.4K0
如何在 iOS 的源码中包含图片?
QT 智能提示设置
qt5.0的智能提示设置 qt默认的是Ctrl+空格 但这个是切换输入法,用着也不习惯 修改的地方是 工具-》选项-》环境 键盘选项把CompleteThis修改成自己习惯的快捷键
lpxxn
2018/01/31
1.1K0
QT 智能提示设置
13.QT-QMainWindow组件使用
QMainWindow介绍 主窗口是与用户进行长时间交互的顶层窗口,比如记事本 主窗口通常是应用程序启动后显示的第一个窗口 QMainWindow是Qt中主窗口的基类,继承于QWidget,如下图所
诺谦
2018/05/28
2.3K0
bootstrap中的Tooltips工具提示的使用问题
在使用bootstrap中的Tooltips时,官方文档中的实例代码若直接放在.container 或 .container-fluid类中时,四个button悬停之后会把button之间的margin去掉,代码如下:
kirin
2021/01/20
1.7K0
使用Qt Designer 设计主窗口
选中Type Here 处 双击(或按 Enter键)编辑菜单名。输入完毕后按Enter 键 确认,可继续编辑下一个菜单项。如有必要,可以在菜单项之间添加分隔符。可拖动以修改菜单项的顺序。
用户6021899
2019/08/14
4.8K0
pycharm缺少模块-解释器(interpreter)中已经包含还是提示ModuleNotFoundError
pycharm缺少模块 ,搞了好久,自己测试出来的, settings - project - project interpreter - 配置按钮中 - 添加even - 模块列表中已经显示出来了 但还是提示 ModuleNotFoundError
waki
2021/12/08
1.3K0
pycharm缺少模块-解释器(interpreter)中已经包含还是提示ModuleNotFoundError
如何在 JS 中判断数组是否包含指定的元素(多种方法)
最近开源了一个 Vue 组件,还不够完善,欢迎大家来一起完善它,也希望大家能给个 star 支持一下,谢谢各位了。
前端小智@大迁世界
2021/02/04
26.6K0
如何在Mac上的软件更新中隐藏MacOS Catalina更新提示
有好多小伙伴不愿意升级到MacOS Catalina,但是电脑上有系统更新的红点,那么怎么去除呢,下面教大家如何在Mac上的软件更新中隐藏MacOS Catalina,Mac取消系统更新的红点。
MAC先森
2019/10/21
5.4K0
Qt 之等待提示框(QMovie)
关于gif的使用在实际项目中我用的并不多,因为我感觉瑕疵挺多的,很多时候锯齿比较严重,当然与图存在很大的关系。
全栈程序员站长
2022/07/04
1.8K0
Qt 之等待提示框(QMovie)
GCC工具链都包含哪些工具
GCC原名为GNU C语言编译器(GNU C Compiler),原本只能处理C语言。后来随着功能的扩展,支持的语言种类越来越多 ,故更名为GCC(GNU Compiler Collection,GNU编译器套件)
乱码三千
2021/08/24
1.7K0
EasyDSS提示所配置路径不能包含中文的处理方法
EasyDSS能实现视频流媒体的上传、转码、存储、录像、推流、拉流、直播等功能。在视频能力上,平台可支持用户自行上传视频文件,也可将上传的点播文件作为虚拟直播进行播放。EasyDSS能支持多屏播放,可兼容Windows、Android、iOS、Mac等操作系统,还能支持CDN转推,具备较强的可拓展性与灵活性。
TSINGSEE青犀视频
2022/08/24
5830
Qt官方示例-菜单栏
本例子介绍如何在应用程序中使用菜单栏。 创建一个菜单栏 QMenu *menu = new QMenu(this); 添加一个菜单项目(Edit) editMenu = menuBar()->add
Qt君
2020/07/29
1.4K0
Qt官方示例-菜单栏
用Qt写软件系列四:定制个性化系统托盘菜单
导读     一款流行的软件,往往会在功能渐趋完善的时候,通过改善交互界面来提高用户体验。毕竟,就算再牛逼的产品,躲藏在糟糕的用户界面之后总会让用户心生不满。界面设计需综合考虑审美学、心理学、设计学等
24K纯开源
2018/01/18
2.9K0
用Qt写软件系列四:定制个性化系统托盘菜单
【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?
可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。
AiDBA宝典
2019/09/30
28.8K0
【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?
【Qt源码笔记】浅谈 Qt 中的控件绘制
在工作中经常要根据 UI 提供的稿子做自绘控件,而且在新项目中,我自己基于 Qt 做了一套项目自用控件库,还会涉及到换肤,所以对 Qt 的控件绘制,着重的研究了一下。看过代码之后,觉得 Qt 项目本身,确实是做 UI 发家,绘制流程清晰,可以说是做界面的范本了。将流程梳理记录一下。
Harper
2021/07/27
2.2K1
错误提示毁了你的设计!如何在UI界面中优雅的展示“错误”信息?
静电说:用户讨厌看到错误提示,因为这对于任何人来说都是非常沮丧和受挫的。写得不好的错误消息可能会彻底破坏您的用户,甚至损害您的品牌。今天我们就来分享一些小技巧,让各位设计师能更好的将错误提示展示出来,从而让用户更好的避免操作中的错误,或者至少,让你的用户不那么沮丧。
用户5009027
2022/04/07
2.2K0
错误提示毁了你的设计!如何在UI界面中优雅的展示“错误”信息?
qt中qmake的详解
1.首先,感性的认识是,qmake可以利用源文件(包括头文件h,实现文件cpp,qt的ui文件等等)生成各种不同类型的工程,工程需要的Makefile文件,可执行的与不可执行的,这取决于所用的模板(包括app、lib、subdirs、vcapp、vclib)。
全栈程序员站长
2022/07/21
2.7K0
qt中qmake的详解
Itunes Connect 如添加图片(图像不能包含alpha通道或者透明度)
Itunes Connect 添加图片的时候,提示我们: "图像不能包含alpha通道或者透明度"
GuangdongQi
2018/09/13
9930
点击加载更多

相似问题

如何在Qt中显示工具提示

20

Qt中的多彩工具提示

12

如何在工具提示处于活动状态时更改菜单项工具提示文本?

11

带箭头的Qt工具提示

14

Android工具提示菜单项样式

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文