J'ai écrit du code un peu comme ceci, où je voulais placer une vue arborescente dans une zone de liste déroulante et j'avais besoin de prendre une action lorsque la case à cocher de l'arbre était cliquée. Ce que j'ai fini par faire était d'installer un filtre d'événement sur la zone de liste déroulante pour intercepter les clics de souris, comprendre où le clic de 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);
}
Où voulez-vous avoir l'icône? Toujours à côté du texte, alors jetez un oeil à: http://doc.trolltech.com/4.6/qcombobox.html#addItem-2 ou seulement lorsque vous déplacez la souris sur l'élément? –
Combien d'utilisateurs s'attendent à ce que l'élément soit supprimé lorsque vous cliquez sur l'icône dans une liste déroulante? Je voudrais créer un bouton de suppression distinct en plus de la liste déroulante, et d'abord laisser l'utilisateur sélectionner l'élément qu'il veut supprimer. –
Pour Rupert - Je n'ai aucun problème pour obtenir l'icône ici. Je souhaite recevoir des événements de souris lorsqu'un utilisateur clique dessus. – Dutt