Pregunta

Quiero incluir un icono "Quitar" en las entradas de mi QComboBox, pero estoy teniendo problemas para controlar el evento de prensa ratón. He tratado de atraparlo en el cuadro combinado, y he intentado reimplemting la clase QIcon para coger el mousepress allí. No dados. ¿Alguien sabe cómo hacer esto?

-D

¿Fue útil?

Solución

código que he escrito un poco como este, donde quería poner una vista de árbol dentro de un cuadro combinado y que necesitaba tomar una acción cuando se hace clic en la casilla de verificación en el árbol. Lo que terminé haciendo fue la instalación de un filtro de eventos en el cuadro combinado de clics de ratón, intercepción de averiguar dónde estaba pasando el clic del ratón, y luego tomar una acción. Probablemente se puede hacer el mismo tipo de cosas con su icono. Aquí está el código:

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

Otros consejos

Tal vez usted puede reimplementar QComboBox::mousePressEvent(QMouseEvent *e) y el uso e.x() junto con QComboBox::iconSize() para encontrar si el suceso se produjo sobre el icono.

Esto causa de ruptura si un estilo Qt decide cambiar la etiqueta y la posición de icono en los cuadros combinados. No sé si eso es posible?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top