天天看點

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\\.\\[email protected]#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\[email protected]#$%^&*+?:_/=<>]*)?)"      
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\\.\\[email protected]#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\[email protected]#$%^&*+?:_/=<>]*)?)"      

繼續閱讀