Question

Je veux inclure une icône « supprimer » sur les entrées dans mon QComboBox, mais je ne parviens pas à attraper l'événement de presse de la souris. J'ai essayé de l'attraper sur le combobox, et je l'ai essayé reimplemting la classe QIcon pour attraper le mousepress là. Pas de dé. Quelqu'un sait-il comment faire?

-D

Était-ce utile?

La solution

J'ai code écrit un peu comme ça, où je voulais mettre une vue arborescente dans une zone de liste déroulante et je devais prendre une action lorsque la case à cocher sur l'arbre a été cliqué. Ce que je fini par faire était d'installer un filtre d'événements sur la zone de liste déroulante pour intercepter les clics de souris, savoir où le clic de la souris se passait, puis prendre une action. vous pouvez probablement faire le même genre de chose avec votre icône. Voici le code:

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);
}

Autres conseils

Peut-être que vous pouvez ré-écrire et d'utiliser QComboBox::mousePressEvent(QMouseEvent *e) e.x() avec QComboBox::iconSize() pour trouver si l'événement a eu lieu sur l'icône.

Ce sera hors pause parce que si un style Qt décide de changer l'étiquette et la position de l'icône dans les zones de liste déroulante. Je ne sais pas si cela est possible?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top