简述

相信大家都用过词典吧!因为英语不太好。。。O(∩_∩)O~,所以经常进行划词翻译!

实现

原理:鼠标移至某单词之上,获取鼠标位置,然后在对应位置进行取词,翻译!

基于此原理,下面我们实现为每一个单词显示QToolTip。

效果

源码

创建QTextEdit队形,然后通过installEventFilter进行事件监听。

  1. m_pTextEdit = new QTextEdit(this);
  2. m_pTextEdit->setObjectName("highlightLabel");
  3. m_pTextEdit->append(QString::fromLocal8Bit("一去丶二三里"));
  4. m_pTextEdit->append(QString::fromLocal8Bit("青春不老,奋斗不止!"));
  5. m_pTextEdit->append(QString::fromLocal8Bit("You are not alone."));
  6. m_pTextEdit->append(QString::fromLocal8Bit("进步始于交流,收获源于分享。"));
  7. // 安装事件过滤器
  8. m_pTextEdit->installEventFilter(this);

实现eventFilter,判断事件类型为QEvent::ToolTip时,获取光标,进行取词。

  1. bool MainWindow::eventFilter(QObject *obj, QEvent *event)
  2. {
  3. if (obj == m_pTextEdit)
  4. {
  5. // 事件为提示
  6. if (event->type() == QEvent::ToolTip)
  7. {
  8. QHelpEvent *pHelpEvent = static_cast<QHelpEvent *>(event);
  9. // 获取光标
  10. QTextCursor cursor = m_pTextEdit->cursorForPosition(pHelpEvent->pos());
  11. cursor.select(QTextCursor::WordUnderCursor);
  12. // 显示提示信息
  13. QToolTip::showText(pHelpEvent->globalPos(), cursor.selectedText());
  14. return true;
  15. }
  16. }
  17. return QDialog::eventFilter(obj, event);
  18. }

如果对事件过滤不熟悉,可查看更多参考。

更多参考

Qt之字典划词的更多相关文章

  1. 划词标注1——使用svg绘制换行文本并自动识别库中字典数据

    业务需求 给出一段文本,自动识别出文本中包含的关键字信息,关键字是库里已知的数据,根据类型的不同显示出不同的颜色 业务分析 1)采用css:文本识别出来后,根据识别出的文本更改对应文本的dom,通过更 ...

  2. 【uwp】浅谈China Daily 中划词翻译的实现

    学习uwp开发也有一段时间了,最近上架了一个小应用(China Daily),现在准备将开发中所学到的一些东西拿出来跟大家分享交流一下. 先给出应用的下载链接:China Daily , 感兴趣的童鞋 ...

  3. Ubuntu 划词翻译

    在 Windows 下用 QTranslate 可以划词翻译,调用谷歌或百度翻译引擎,不需要本地词典. 在 Ubuntu 下可以自己写脚本实现一个简陋的版本. 步骤如下: 安装 xsel,sudo a ...

  4. Chrome划词翻译-Saladict

    Saladict 沙拉查词是一款专业划词翻译扩展,为交叉阅读而生.大量权威词典涵盖中英日韩法德西语,支持复杂的 划词操作.网页翻译.生词本.PDF,以及 Vimium 全键盘操作 . 迄今为止最好用的 ...

  5. [技术博客]WEB实现划词右键操作

    [技术博客]WEB实现划词右键操作 一.功能解释 简单地对题目中描述的功能进行解释:在浏览器中,通过拖动鼠标选中一个词(或一段文字),右键弹出菜单,且菜单为自定义菜单,而非浏览器本身的菜单.类似的功能 ...

  6. qt qml 九宫格划指锁屏视图

    九宫格划指锁屏视图Lisence: MIT, 请保留本文档说明Author: surfsky.cnblogs.com 2015-02 [先看效果] [下载] http://download.csdn. ...

  7. 《Qt 实战一二三》

    简介 "我们来自Qt分享&&交流,我们来自Qt Quick分享&&交流",不管你是笑了,还是笑了,反正我们是认真的.我们就是要找寻一种Hold不住的 ...

  8. Deepin中安装使用好用的字典GoldenDict

    2020-03-21   23:08:17 不说废话直接来安装步骤: 打开Deepin的应用商店,输入GoldenDict查找: 找到后点击安装,然后等待一小会,电脑提示音告诉你已经安装完成: 然后再 ...

  9. CRF技能词识别过程

    最近在用CRF做未登录技能词识别,虽然艰难,但是感觉很爽,效率非常高. (1)数据准备: 选取30000行精语料作为训练数据.每一个br作为一条数据.使用已有的技能词典对数据进行无标注分词. (2)训 ...

随机推荐

  1. [LeetCode] 350. 两个数组的交集 II intersection-of-two-arrays-ii(排序)

    思路: 先找到set的交集,然后分别计算交集中的每个元素在两个原始数组中出现的最小次数. class Solution(object): def intersect(self, nums1, nums ...

  2. Vue - vue.js 常用指令

    Vue - vue.js 常用指令 目录: 一. vuejs模板语法之常用指令 1. 常用指令: v-html 2. 常用指令: v-text 3. 常用指令: v-for 4. 常用指令: v-if ...

  3. Unity的Json解析<一>--读取Json文件

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50373558 作者:car ...

  4. SQL SERVER-数据库的远程访问解决办法

    除了下面的这个RemoteDacEnabled更改为true之后,还要把防火墙关闭,才能通过IP地址访问数据库 来自为知笔记(Wiz)

  5. Tarjan强联通分量【模板】

    #include <algorithm> #include <cstdio> using namespace std; ); int n,m,v,u; int edgesum, ...

  6. MarkDown、Vim双剑合璧

    作为一名软件攻城狮(是的,我从来都以攻城狮自居! 我坚信如今的每一天,都在朝攻城狮迈进.虽然被菜鸟的肉身皮囊裹着,我依然还是怀着攻城狮的内心! 我非常讨厌别人喊我程序猿.虽然这是不争的事实!).... ...

  7. leetcode第一刷_Reverse Linked List II

    翻转链表绝对是终点项目,应该掌握的,这道题要求的是翻转一个区间内的节点.做法事实上非常相似,仅仅只是要注意判定開始是头的特殊情况,这样head要更新的,还有就是要把翻转之后的尾部下一个节点保存好,要么 ...

  8. 高斯滤波及高斯卷积核C++实现

    高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,在图像处理的降噪.平滑中应用较多,特别是对抑制或消除服从正态分布的噪声非常有效. 高斯滤波的过程其实就是对整幅图像进行加权平均操作的过程.滤波后图像上每 ...

  9. Oracle11g数据库导入Oracle10g数据库操作笔记

    一.在11g服务器上,使用expdp命令备份数据 EXPDP USERID='SYS/sys@daggis as sysdba' schemas=oa directory=DATA_PUMP_DIR ...

  10. 文本编辑工具 Vim

    Vim是Vi的升级版 vi和Vim的区别在于vi不会显示颜色,Vim会显示颜色 1.如果没有,可以安装 #yum install -y vim-enhanced