QT QTextEdit中超链接

最近要QTextEdit中 有超链接 功能, 在网上查了一下,没找到满意的,就自己写了一个

这个代码是根据博客  http://blog.csdn.net/shizheng163/article/details/53312201    改造的。

感谢,感谢,这里也将我写的代码分享给大家


#ifndef MYTEXTEDIT_H
#define MYTEXTEDIT_H
 
#include <QTextEdit>
 
class myTextEdit : public QTextEdit
{
    Q_OBJECT
public:
    explicit myTextEdit(QWidget *parent = 0);
 
    QString GetlinkUrl(const QString &str);
    void SetTextContent(const QString &str);
 
    typedef struct urldata{
        int firstPos;
        int lastPos;
        QString url;
    }UrlData;
 
signals:
    void openUrl(QString);
 
public slots:
 
protected:
    void mouseReleaseEvent(QMouseEvent *);
 
private:
    QList<UrlData> m_list;
 
};
 
#endif // MYTEXTEDIT_H

#include "mytextedit.h"
#include <QDebug>
 
#define LINK_RegulaString "((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)"
 
myTextEdit::myTextEdit(QWidget *parent) :
    QTextEdit(parent)
{
}
 
void myTextEdit::SetTextContent(const QString &str)
{
    m_list.clear();
    UrlData  data;
    QString content = str;
    QRegExp regexp(LINK_RegulaString);
    int pos = content.indexOf(regexp);
    while(pos>=0)
    {
        QString tmp1 = content.mid(0, pos);
        this->append(tmp1);
        int count1 = this->toPlainText().size();
        QString tmp2 = content.mid(pos, regexp.matchedLength());
        this->append(this->GetlinkUrl(tmp2));
        int count2 = this->toPlainText().size();
        //
        data.firstPos = count1;
        data.lastPos = count2;
        data.url = tmp2;
        m_list << data;
        //
        content = content.mid(pos+regexp.matchedLength());
        pos = content.indexOf(regexp);
 
    }
    this->append(content);
}
 
QString myTextEdit::GetlinkUrl(const QString &str)
{
    return "<a href='"+str+"'>"+str+"</a>";
}
 
void myTextEdit::mouseReleaseEvent(QMouseEvent *event)
{
    int index = this->textCursor().anchor();
    qDebug() << "index" <<  index;
    for(int i = 0; i< m_list.count(); i++)
    {
        if(index > m_list.at(i).firstPos && index <m_list.at(i).lastPos)
        {
            emit  openUrl(m_list.at(i).url);
            qDebug() << m_list.at(i).url;
        }
    }
    QTextEdit::mousePressEvent(event);
}
 

如果在富文本中有超链接,会破坏富文本

这里可以更改 正则表达式

#define LINK_RegulaString "((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)"


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值