Multiselect combobox UX tweaks:

- left clicking in the combo box opens the dropdown, just like a standard
combo box
- right clicking on an unexpanded combo shows the correct context menu
for the widget, instead of the default line edit context menu
This commit is contained in:
Nyall Dawson 2020-05-27 09:15:30 +10:00
parent 4f7fcb3089
commit 923072d9e9

View File

@ -87,6 +87,9 @@ QgsCheckableComboBox::QgsCheckableComboBox( QWidget *parent )
pal.setBrush( QPalette::Base, pal.button() );
lineEdit->setPalette( pal );
setLineEdit( lineEdit );
lineEdit->installEventFilter( this );
lineEdit->setContextMenuPolicy( Qt::CustomContextMenu );
connect( lineEdit, &QAbstractItemView::customContextMenuRequested, this, &QgsCheckableComboBox::showContextMenu );
mContextMenu = new QMenu( this );
mSelectAllAction = mContextMenu->addAction( tr( "Select All" ) );
@ -227,8 +230,16 @@ void QgsCheckableComboBox::deselectAllOptions()
bool QgsCheckableComboBox::eventFilter( QObject *object, QEvent *event )
{
if ( ( event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease )
&& object == view()->viewport() )
if ( object == lineEdit() )
{
if ( event->type() == QEvent::MouseButtonPress && static_cast<QMouseEvent *>( event )->button() == Qt::LeftButton && object == lineEdit() )
{
mSkipHide = true;
showPopup();
}
}
else if ( ( event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease )
&& object == view()->viewport() )
{
mSkipHide = true;