Frage

Ich möchte auf Einträge in meinem QComboBox ein „Entfernen“ -Symbol schließen, aber ich habe Schwierigkeiten mit der Maus Presse-Event zu kontrollieren. Ich habe versucht, es auf die Combobox zu fangen, und ich habe versucht, die QIcon Klasse reimplemting dort die mousepress zu fangen. Kein Würfel. Weiß jemand, wie dies zu tun?

D

War es hilfreich?

Lösung

habe ich Code ein bisschen so geschrieben, wo ich eine Baumansicht in einem Kombinationsfeld setzen wollte und ich brauchte eine Aktion zu ergreifen, wenn das Kontrollkästchen auf dem Baum geklickt wurde. Was ich am Ende tun war auf dem Kombinationsfeld zu Intercept Mausklicks einen Ereignisfilter installieren, herauszufinden, wo die Mausklick vorging, und dann eine Aktion. Wahrscheinlich können Sie die gleiche Art der Sache mit dem Symbol tun. Hier ist der 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);
}

Andere Tipps

Vielleicht können Sie QComboBox::mousePressEvent(QMouseEvent *e) und Verwendung e.x() zusammen mit QComboBox::iconSize() reimplementieren zu finden, wenn das Ereignis auf das Symbol aufgetreten über.

Dies wird ausgeschaltet Ursache Pause, wenn ein Qt-Stil entscheidet in Combo-Box Label und Symbol Position zu wechseln. Weiß nicht, ob das möglich ist?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top