QIcon all'interno combobox
-
24-09-2019 - |
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
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?