Hi
I've solved it in a rather cumbersome way where I use cursorForPosition() to manually sweep each QTextBlock for a URL.
Here is basically what I do:
{
int cursor_pos = cursorForPosition(e->pos()).position();
int block_pos = block.position();
QVector<int> url_index, url_length;
int index = 0;
do
{
int length = 0;
url = urlFound(text, index, length);
if(url.size())
{
url_index.push_back(index);
url_length.push_back(length);
urls.push_back(url);
}
index += length;
}
while(url.size());
url.clear();
for(int i=0;i<url_index.size();i++)
{
if(cursor_pos >= block_pos+url_index[i] &&
cursor_pos < block_pos+url_index[i]+url_length[i])
{
url = urls[i];
break;
}
}
return url;
}
QString ChatTextEdit::currentUrl(QMouseEvent* e) const
{
QTextDocument* doc = document();
int cursor_pos = cursorForPosition(e->pos()).position();
QTextBlock block = doc->findBlock(cursor_pos);
int block_pos = block.position();
QString text = block.text();
QVector<int> url_index, url_length;
QStringList urls;
int index = 0;
QString url;
do
{
int length = 0;
url = urlFound(text, index, length);
if(url.size())
{
url_index.push_back(index);
url_length.push_back(length);
urls.push_back(url);
}
index += length;
}
while(url.size());
url.clear();
for(int i=0;i<url_index.size();i++)
{
if(cursor_pos >= block_pos+url_index[i] &&
cursor_pos < block_pos+url_index[i]+url_length[i])
{
url = urls[i];
break;
}
}
return url;
}
To copy to clipboard, switch view to plain text mode
-- Bjoern
Bookmarks