QIcon внутри выпадающего списка - PullRequest
1 голос
/ 05 марта 2010

Я хочу включить значок «удалить» в записи в моем QComboBox, но у меня возникают проблемы с перехватом события нажатия мыши. Я попытался поймать его в выпадающем списке, и я попытался повторно реализовать класс QIcon, чтобы поймать нажатие мышки там. Нет кости. Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

0 голосов
/ 06 мая 2010

Я написал код, похожий на этот, где я хотел поместить древовидное представление в поле со списком, и мне нужно было предпринять действие, когда был установлен флажок на дереве. В итоге я установил фильтр событий в поле со списком, чтобы перехватывать щелчки мыши, выяснять, где происходил щелчок мыши, и затем предпринимать действия. Вероятно, вы можете сделать то же самое с вашей иконой. Вот код:

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);
}
0 голосов
/ 09 апреля 2010

Может быть, вы можете переопределить QComboBox::mousePressEvent(QMouseEvent *e) и использовать e.x() вместе с QComboBox::iconSize(), чтобы узнать, произошло ли событие над значком.

Это отключит вызов, если стиль Qt решит изменить метку и положение значка в комбинированных полях. Не знаете, возможно ли это?

...