QTextEdit 特定行改变鼠标形状

问题

由于需要, 在 QTextEdit 中需要对有文件路径的行, 在鼠标移动到路径上方时改变鼠标形状, 双击文件路径可以调用系统默认程序打开该文件.

这里有两个要点:

  • 打开鼠标踪 setMouseTracking(true)
  • 获取鼠标下的行文本

实现

通过重载 void mouseMoveEvent(QMouseEvent *e) 来捕获鼠标事件, 具体代码如下

// 行文本形式如下
// <<word 文档标题>> [word 文档路径] 段落序号

/*
*/
void DzfContentEdit::mouseMoveEvent(QMouseEvent *e)
{
    QTextEdit::mouseMoveEvent(e);

    // 得到鼠标下行文本
    auto pos = e->pos();
    auto cursor = cursorForPosition(pos);    
    cursor.select(QTextCursor::LineUnderCursor);
    auto line = cursor.selectedText();

    QRegExp reg("\\[(.*docx?)\\]");
    if(reg.indexIn(line) != -1){
        // 得到文件路径
        doc_ = reg.capturedTexts().at(1);

        // 若在指定行上, 改变鼠标形状
        viewport()->setCursor(Qt::PointingHandCursor);
    }else{
        doc_.clear();

        // 若不在指定行上, 恢复鼠标形状
        viewport()->setCursor(Qt::IBeamCursor);
    }
}

/*
*/
void DzfContentEdit::mouseDoubleClickEvent(QMouseEvent *e)
{    
    if(!doc_.isEmpty()){
       // 文件路径前不加上 "file:///", 路径中含中文字符时出现乱码
       doc_.prepend("file:///");

       // 打开文件
       QDesktopServices::openUrl(QUrl(doc_));
    }else{
        QTextEdit::mouseDoubleClickEvent(e);
    }
}

最后

对于指定行的文本格式, 最好是鼠标在路径上方时才变为手形形状. 当前实现是在整行都会变为手形鼠标形状.

若有高手知道如何实现, 还请告知~~

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值