Russian Qt Forum

Qt => Общие вопросы => Тема начата: Mish_ka от Апрель 26, 2011, 11:33



Название: [РЕШЕНО] QListWidget и мышь
Отправлено: Mish_ka от Апрель 26, 2011, 11:33
Кто знает как отфильтровать в QListWidget только клик левой кнопкой мыши?

Код
C++ (Qt)
connect(QListWidget, SIGNAL(currentRowChanged(int)),
           this, SLOT(function(int)));
 

это нажатие на элемент списка и получение его индекса реагирует на все кнопки мыши. Как сделать ограничение только на левую кнопку?


Название: Re: QListWidget и мышь
Отправлено: GreatSnake от Апрель 26, 2011, 11:46
Перегрузи mousePressEvent() и не вызывай базовый в случае нажатия ненужных кнопок.


Название: Re: QListWidget и мышь
Отправлено: Mish_ka от Апрель 26, 2011, 11:57
извиняюсь, но я не понял...


Название: Re: QListWidget и мышь
Отправлено: GreatSnake от Апрель 26, 2011, 12:19
Заводишь свой класс и перегружаешь mousePressEvent:
Код
C++ (Qt)
class MyListWidget : public QListWidget
{
   Q_OBJECT
public:
   MyListWidget( QWidget* p = 0 ) : QListWidget( p ) {}
   virtual ~MyListWidget() {}
 
protected:
   void mousePressEvent( QMouseEvent* e )
   {
        if( e->button() == Qt::LeftButton )
            QListWidget::mousePressEvent( e );
        else
            e->accept();
   }
};


Название: Re: QListWidget и мышь
Отправлено: Mish_ka от Апрель 26, 2011, 12:28
А если этот виджет я добавляю не из кода а из дизайнера форм?


Название: Re: QListWidget и мышь
Отправлено: madRoger от Апрель 26, 2011, 13:10
Цитировать
А если этот виджет я добавляю не из кода а из дизайнера форм?
Тогда используйте eventFilter


Название: Re: QListWidget и мышь
Отправлено: Mish_ka от Апрель 26, 2011, 13:20
Тогда используйте eventFilter

не могу разобраться как им пользоваться, подскажите пожалуйста.


Название: Re: QListWidget и мышь
Отправлено: madRoger от Апрель 26, 2011, 13:42
В объявлении класса добавляешь метод
Код:
bool eventFilter(QObject *, QEvent *);
Для списка устанавливаешь этот фильтр где-то в конструкторе класса:
Код:
ui->listWidget->viewport()->installEventFilter(this);
реализуешь сам фильтр например так:
Код:
bool класс::eventFilter(QObject *obj, QEvent *event)
{
    QListWidget *lw = (QListWidget*)(obj);
    if(lw)
    { if(event->type()==QEvent::MouseButtonPress)
      { QMouseEvent *me = (QMouseEvent*)event;
        if(me->button()==Qt::LeftButton)
        { QMessageBox::about(this,"filter","I catch left click");
        }
      }
    }
    return QWidget::eventFilter( obj, event );
}


Название: Re: QListWidget и мышь
Отправлено: Mish_ka от Апрель 26, 2011, 13:58
пасибо  :o