У меня есть элемент делегата, что когда событие мыши заканчивается над значком, я изменяю его Курсор на Qt :: PointingHandCursor, когда он выключен, я возвращаю его обратно в Qt :: ArrowCursor.он работает нормально.
проблема в том, что, кроме того, когда он над значком.он всегда складывается в Qt :: ArrowCursor даже в ситуации, когда значок должен быть изменен изначально, например, при изменении размера окна или при нажатии на встроенную кнопку.это всегда Qt :: ArrowCursor.
как я могу заставить Курсор действовать нормально, когда его нет над значком?
вот что я делаю:
bool MiniItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *model,
const QStyleOptionViewItem &option,
const QModelIndex &index)
{
// Emit a signal when the icon is clicked
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
if(!index.parent().isValid() &&
event->type() == QEvent::MouseMove)
{
QSize iconsize = m_iconAdd.actualSize(option.decorationSize);
QRect closeButtonRect = m_iconAdd.pixmap(iconsize.width(),iconsize.height()).
rect().translated(AddIconPos(option));
QSize iconRemoveSize = m_iconRemove.actualSize(option.decorationSize);
QRect iconRemoveRect = m_iconRemove.pixmap(iconRemoveSize.width(),iconRemoveSize.height()).
rect().translated(RemoveIconPos(option));
if(closeButtonRect.contains(mouseEvent->pos()))
{
QApplication::setOverrideCursor(QCursor(Qt::PointingHandCursor));
}
else if(iconRemoveRect.contains(mouseEvent->pos()))
{
QApplication::setOverrideCursor(QCursor(Qt::PointingHandCursor));
}
else
{
Qt::CursorShape shape = Qt::ArrowCursor;
QApplication::setOverrideCursor(QCursor(shape));
}
}
if(!index.parent().isValid() &&
event->type() == QEvent::MouseButtonRelease)
{
QSize iconsize = m_iconAdd.actualSize(option.decorationSize);
QRect closeButtonRect = m_iconAdd.pixmap(iconsize.width(),iconsize.height()).
rect().translated(AddIconPos(option));
QSize iconRemoveSize = m_iconRemove.actualSize(option.decorationSize);
QRect iconRemoveRect = m_iconRemove.pixmap(iconRemoveSize.width(),iconRemoveSize.height()).
rect().translated(RemoveIconPos(option));
if(closeButtonRect.contains(mouseEvent->pos()))
{
;
}
else if(iconRemoveRect.contains(mouseEvent->pos()))
{
;
}
}
return false;
}