Я написал код, похожий на этот, где я хотел поместить древовидное представление в поле со списком, и мне нужно было предпринять действие, когда был установлен флажок на дереве. В итоге я установил фильтр событий в поле со списком, чтобы перехватывать щелчки мыши, выяснять, где происходил щелчок мыши, и затем предпринимать действия. Вероятно, вы можете сделать то же самое с вашей иконой. Вот код:
bool TreeComboBox::eventFilter(QObject* object, QEvent* event)
{
if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease)
{
QMouseEvent* m = static_cast<QMouseEvent*>(event);
QModelIndex index = view()->indexAt(m->pos());
QRect vrect = view()->visualRect(index);
if(event->type() == QEvent::MouseButtonPress &&
(model()->flags(index) & Qt::ItemIsUserCheckable) &&
vrect.contains(m->pos()))
{
// Your action here
ToggleItem(index);
UpdateSelectionString();
}
if (view()->rect().contains(m->pos()))
skipNextHide = true;
}
return QComboBox::eventFilter(object, event);
}