I think I have found a solution that is not necessarily complete (e.g. drive the combbox with keyboard).
I add a boolean (e.g. mSkipToogle=false) at the same place than mSkipHide.
I rewrite eventFilter (QObject* object, QEvent* event).
bool CFilterCountryComboBox::eventFilter (QObject* object, QEvent* event)
{
QEvent::Type type = event->type ();
if (object == view ()->viewport ())
{
switch (type)
{
case QEvent::MouseButtonRelease :
case QEvent::MouseButtonPress :
mSkipHide = true;
mSkipToogle = false;
break;
case QEvent::Hide :
case QEvent::Show :
mSkipToogle = true;
break;
default :
break;
}
}
if (type == QEvent::MouseButtonRelease && static_cast<QMouseEvent*>(event)->button () == Qt::RightButton)
{
return true;
}
return QComboBox::eventFilter (object, event);
}
Now rewrite
toggleItemCheckState (int index)
void CFilterCountryComboBox::toggleItemCheckState (int index)
{
if (!mSkipToogle)
{
QVariant value = itemData (index, Qt::CheckStateRole);
Qt::CheckState state = static_cast<Qt::CheckState>(value.toInt ());
setItemData (index, (state == Qt::Unchecked ? Qt::Checked : Qt::Unchecked), Qt::CheckStateRole);
}
else
{
mSkipToogle = false;
}
}
It seems to work on Windows with Qt 5.12.7.
Good luck