本文主要是介绍Qt 之字典划词,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
简述
相信大家都用过词典吧!因为英语不太好。。。O(∩_∩)O~,所以经常进行划词翻译!
| 版权声明:一去、二三里,未经博主允许不得转载。
实现
原理:鼠标移至某单词之上,获取鼠标位置,然后在对应位置进行取词,翻译!
基于此原理,下面我们实现为每一个单词显示QToolTip。
效果
源码
创建QTextEdit队形,然后通过installEventFilter进行事件监听。
m_pTextEdit = new QTextEdit(this);
m_pTextEdit->setObjectName("highlightLabel");
m_pTextEdit->append(QString::fromLocal8Bit("一去丶二三里"));
m_pTextEdit->append(QString::fromLocal8Bit("青春不老,奋斗不止!"));
m_pTextEdit->append(QString::fromLocal8Bit("You are not alone."));
m_pTextEdit->append(QString::fromLocal8Bit("进步始于交流,收获源于分享。"));// 安装事件过滤器
m_pTextEdit->installEventFilter(this);
实现eventFilter,判断事件类型为QEvent::ToolTip时,获取光标,进行取词。
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{if (obj == m_pTextEdit){// 事件为提示if (event->type() == QEvent::ToolTip){QHelpEvent *pHelpEvent = static_cast<QHelpEvent *>(event);// 获取光标QTextCursor cursor = m_pTextEdit->cursorForPosition(pHelpEvent->pos());cursor.select(QTextCursor::WordUnderCursor);// 显示提示信息QToolTip::showText(pHelpEvent->globalPos(), cursor.selectedText());return true;}}return QDialog::eventFilter(obj, event);
}
如果对事件过滤不熟悉,可查看更多参考。
更多参考
- Qt之密码框不可选中、复制、粘贴、无右键菜单等
这篇关于Qt 之字典划词的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!