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);
}

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

更多参考

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一去丶二三里

有收获,再打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值