Domanda

Voglio includere un'icona "Rimuovi" sulle voci nella mia QComboBox, ma sto avendo difficoltà cattura l'evento stampa del mouse. Ho cercato di prenderlo sulla casella combinata, e ho provato reimplemting classe QIcon per prendere il mousepress lì. Niente da fare. Qualcuno sa come fare questo?

-D

È stato utile?

Soluzione

Ho scritto codice un po 'come questo, in cui ho voluto mettere una vista ad albero all'interno di una casella combinata e avevo bisogno di eseguire un'azione quando la casella di controllo sul legno della croce è stato cliccato. Quello che ho finito per fare era l'installazione di un filtro eventi sulla casella combinata ai clic del mouse intercettare, capire dove il clic del mouse stava accadendo, e poi prendere un'azione. Probabilmente si può fare lo stesso genere di cose con la vostra icona. Ecco il codice:

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

Altri suggerimenti

Forse si può reimplementare QComboBox::mousePressEvent(QMouseEvent *e) e l'uso e.x() insieme QComboBox::iconSize() per trovare se l'evento si è verificato sopra l'icona.

Questa volontà fuori causa pausa se uno stile Qt decide di cambiare l'etichetta e la posizione icona nella caselle combinate. Non so se questo è possibile?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top