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:

Qt Code:
  1. QString ChatTextEdit::currentUrl(QMouseEvent* e) const
  2. {
  3. QTextDocument* doc = document();
  4.  
  5. int cursor_pos = cursorForPosition(e->pos()).position();
  6. QTextBlock block = doc->findBlock(cursor_pos);
  7. int block_pos = block.position();
  8.  
  9. QString text = block.text();
  10.  
  11. QVector<int> url_index, url_length;
  12.  
  13. int index = 0;
  14. QString url;
  15. do
  16. {
  17. int length = 0;
  18. url = urlFound(text, index, length);
  19. if(url.size())
  20. {
  21. url_index.push_back(index);
  22. url_length.push_back(length);
  23. urls.push_back(url);
  24. }
  25. index += length;
  26. }
  27. while(url.size());
  28.  
  29. url.clear();
  30.  
  31. for(int i=0;i<url_index.size();i++)
  32. {
  33. if(cursor_pos >= block_pos+url_index[i] &&
  34. cursor_pos < block_pos+url_index[i]+url_length[i])
  35. {
  36. url = urls[i];
  37. break;
  38. }
  39. }
  40.  
  41. return url;
  42. }
To copy to clipboard, switch view to plain text mode 

-- Bjoern