# qt_tool_snippet **Repository Path**: chonglongshan/qt_tool_snippet ## Basic Information - **Project Name**: qt_tool_snippet - **Description**: 一些代码小工具或者小片段 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-10-29 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # qt_tool_snippet ``` **XXXX-XX-XX P1** 1. AAA - aaa - bbb - ccc 2. BBB - aaa - bbb ``` **2020-11-07 P1** 1. 测试动态 new 出来的 QMenu ,如果没有主动释放,那将是如何释放的? - 新建测试工程。 - 复制借用一个 UI 界面。 - 新建 QMenu 的子类 MyMenu 。在构造和析构函数中添加计数代码。 - 增加使用 MyMenu 的测试代码。 - 理解: - 每次 new 出来新的 QMenu ,后续如果没有主动释放,将一直保存在程序中。 - 因为指定了 parent 为 this ,当 QMenu 的父窗口销毁时,所有 new 出来的 QMenu 会自动随父窗口一起销毁。 **2020-11-06 P1** 1. 测试 QIcon 中 icon theme 如何使用。 2. 借用一个使用到 QIcon 的 ui 界面。如菜单就使用到。 3. 参考 [A Guide to Using Icon Themes in Qt on All Platforms](https://openapplibrary.org/dev-tutorials/qt-icon-themes) 使用 icon theme 。 - 将 icon 资源包复制过来,并在 QT 中创建资源文件 lz.prc ,将需要的资源添加进去。 - 一种是常规的 icon 资源。 open-app-library.png - 一种是 icon theme 资源,其需要添加相应的 index.theme 。 folder-alt.svg - 添加 icon theme 的查找路径,以及资源不存在时的备用路径: - QIcon::setThemeSearchPaths(QIcon::themeSearchPaths() << ":icons"); - QIcon::setFallbackSearchPaths(QIcon::fallbackSearchPaths() << ":custom-icons"); - 添加 icon theme 名称: - QIcon::setThemeName("zafiro"); - 从指定的 icon theme 中使用指定的资源(不用带后缀)。资源如果不存在于指定的 icon theme 中,则到备用路径中查找的资源。 - ui->actionNewPoject->setIcon(QIcon::fromTheme("folder-alt")); - ui->actionCloseProject->setIcon(QIcon::fromTheme("open-app-library")); 3. 稍微更改文件夹的名字。不与默认的 ":/icons" 相同。 - 相应变更 icon theme 的查找路径,以及资源不存在时的备用路径: - QIcon::setThemeSearchPaths(QIcon::themeSearchPaths() << ":xicons"); - QIcon::setFallbackSearchPaths(QIcon::fallbackSearchPaths() << ":xcustom-icons"); - 变更路径 URL 的不同书写方式。 - QIcon::setThemeSearchPaths(QIcon::themeSearchPaths() << ":/xicons"); - QIcon::setFallbackSearchPaths(QIcon::fallbackSearchPaths() << ":/xcustom-icons"); 4. 理解: - 按照 icon theme 的规范要求,icon theme 必须要要有一个 index.theme 。 - 包含这个 index.theme 文件夹的名字就是 icon theme 的名字。 - icon theme 的路径是添加到 qrc 文件中形成的路径。 (/xicons/) - 直至包含 index.theme 的文件夹的上一级文件夹。 - 指定的资源时不用带后缀。 **2020-10-29 P2** 1. 测试 QMenu 中 QAction 的 toolTip 显示: - QMenu 的 toolTipsVisible 是影响菜单上的各个子项,即 QAction 的 toolTip 的显示。 - Qt Creator 设计器中添加 QAction 时,toolTip 会默认填入值,但这时该值并不会生效。需要手动再去点击一下该属性或者修改内容,在保存使其生效。 - 也即,猜想是各控件的 toolTip 都需要点击或者修改来激活。 - 鼠标位于 QAction 上时,如果勾选了 toolTipsVisible ,则显示 QAction 的 toolTip ;否则显示 QMenu 的 toolTip <即 QWidget 的 toolTip >,如果有的话。 - 也即,猜想是当勾选了 toolTipsVisible 时, QAction 的 toolTip 优先于 QMenu 的 toolTip 。 - 鼠标位于 QMenu 中非任何 QAction 上时,无论是否勾选了 toolTipsVisible 都显示 QMenu 的 toolTip ,如果有的话。 - 也即,猜想是鼠标当前实际是定位到 QMenu 上的。 - 不太好的地方:当鼠标已经从 QAction 移动到另一个没有设置 toolTip 的 QAction 上是,前一个 QAction 显示的 toolTip 并不能马上消失。 - 不太好的地方: QAction 的 toolTip 一旦激活就必须输入内容。只能输入空格来模拟无内容。此时不会显示空白提示框,当然也没能让前一个 toolTip 马上消失。 2. 将 QMenu 提升为 QMyMenu 。实现 QMyMenu ,其继承自 QMenu 。 - 添加类时,指定基类,其头文件自动被包含。 - 更改构造函数,适配 QMenu::QMenu(QWidget *parent = nullptr) - 设计器中提升更换为 QMyMenu ,可完全提供 QMenu 的功能。 3. 重写基类的虚函数 bool QMenu::event(QEvent *e) 。参考:[为QMenu添加对QAction的tooltip的支持](https://blog.csdn.net/zhaoshuzhi/article/details/6178322) - 子类中可以不写 virtual 关键字。 c++ primer 上也是这样写。 Qt 源码也是这样。 记得 MFC 也是这样。 - 猜想:你想自己使用这种方法,基类是否有这个方法及是否是虚函数,都无关紧要了。 - 而且,使用了 override 关键字,编译器会帮你报错不存在此虚函数。 - 同时,少写内容,提高效率。 4. switch 语句有关的一些注意: - 加上 default: break; 处理警告: enumeration values not handled in switch 。 - case 下也保持缩进。 c++ primer 上是这样写。 - break 保持在大括号外。 c++ primer 上是这样写。 6. 设计器中将 QAction 的 toolTip 输入空格,调试提示框还是显示,内容为菜单项的文本。 - 使用代码设置也是这样显示菜单项的文本。 ui->actionItem3->setToolTip(""); - 问:如何让部分 QAction 的 toolTip 无内容,且不显示? - 目前想到,可约定一种特殊符号表示不用显示。 **2020-10-29 P1** 1. 创建一个仓库存放一些代码小工具或者小片段。 2. .gitignore 中合入 GITHUB 上的qt模板中的内容。