Доброго времени суток!
Есть класс, наследник QListWidget, в котором мне нужно отражать item(ы) (QListWidgetItem), содержащие гипертекстовые ссылки. Для класса установлено свойство:
setMouseTracking(true);
отлавливаю событие мыши mouseMoveEvent и при позиционировании мыши на гиперссылку получаю изменение вида курсора (Qt::PointingHandCursor). Проблема заключается в следующем: при перетаскивании мыши ниже(по вертикали) последнего, отображаемого item(а), курсор не меняет свой вид в первоначальный. На item(ах), которые размещены выше - все нормально, по горизонтали тоже все нормально. Не могу разобраться в чем может быть проблема? Код ниже:
FilterView::FilterView(QWidget *parent)
: QListWidget(parent)
{
setMouseTracking(true);
}
void FilterView::mouseMoveEvent(QMouseEvent *event)
{
QPoint at = relativeToItem(event->pos());
if(at.isNull())
return;
QListWidgetItem *item = static_cast<QListWidgetItem*> (indexAt(event->pos()).internalPointer());
QTextDocument doc;
doc.setHtml(item->text());
if (doc.documentLayout()->anchorAt(at).isEmpty()) {
QApplication::restoreOverrideCursor();
} else {
QCursor *c = QApplication::overrideCursor();
if (!c) {
QApplication::setOverrideCursor(QCursor(Qt::PointingHandCursor));
}
}
}
QPoint FilterView::relativeToItem(const QPoint &p) const
{
QModelIndex idx = indexAt(p);
if (!idx.isValid())
return QPoint();
return QPoint(p.x() - visualRect(idx).x(), p.y() - visualRect(idx).y());
}
Добавляю item(ы):
QListWidgetItem *newItem = new QListWidgetItem(filterView);
QString emptyLink = QString("<a href=\"link\">%1</a>").arg(tr("[...]"));
newItem->setText(emptyLink);