Увы, на данный момент не так-то просто поймать click-событие из элемента в C++/Qt коде, если только элемент не является ссылкой. Для ссылок есть специальный сигнал linkClicked(QUrl). В планах разработки QtWebKit (
TODO List for QtWebKit) висит пункт
Add support for DOM events/listeners
Add QWebElement::connectEvent()
Add support for mapping JS events to Qt events (QMouseEvent, etc.)
Add support for pure JS events (QWebEvent?)
Add support for dispatching events from C++
но то, что этот список помечен как "Last Modified 4 years ago" надежд на появление этих функций в меня не вселяет
Решил пойти иным путём: отображать DOM элементы в виде дерева, используя свою TreeModel+QTreeView, чтобы щелкать по элементам в них, но и здесь меня ждал сюрприз - все Webkit-методы, работающие с элементами, возвращают копии объектов QWebElement, а не постоянные указатели, поэтому использовать их в Qt Model/View "из коробки" не выходит, который требует, чтобы внутренние указатели индексов, возвращаемые методами index()/createIndex() были постоянными при неоднократных вызовах для одних и тех же row/column.
Вспомнил, что есть класс QWebInspector, который выводит DOM-структуру и решил заглянуть в его код, но меня сразу отпугнул тот факт, что он объявлен как friend по отношению к QWebFrame, который и владеет деревом элементов. Копаться по приватным структурам двух классов - небольшое удовольствие, учитывая множество однобуквенных переменных в классах Qt, о назначении которых я не имею ни малейших догадок. Чем могло быть вообще обусловлено решение возвращать копии объектов вместо указателей? Расчет на то, что использоваться элементы будут исключительно поодиночке? Так они сами же следом стали писать веб-инспектор, которому нужен доступ к дереву, естественно пришлось объявлять его как friend ) Мне кажется, или в их коде белки смешаны с бобрами?.. Или они намеренно так его спроектировали, чтобы в open-source реализации им можно было пользоваться только "как есть", побуждая покупать свои закрытые лицензии с возможностью внесения изменений в код?)