Russian Qt Forum
Октябрь 01, 2024, 00:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] QListWidget и мышь  (Прочитано 5096 раз)
Mish_ka
Гость
« : Апрель 26, 2011, 11:33 »

Кто знает как отфильтровать в QListWidget только клик левой кнопкой мыши?

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

это нажатие на элемент списка и получение его индекса реагирует на все кнопки мыши. Как сделать ограничение только на левую кнопку?
« Последнее редактирование: Апрель 29, 2011, 03:34 от Mish_ka » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Апрель 26, 2011, 11:46 »

Перегрузи mousePressEvent() и не вызывай базовый в случае нажатия ненужных кнопок.
Записан

Qt 5.11/4.8.7 (X11/Win)
Mish_ka
Гость
« Ответ #2 : Апрель 26, 2011, 11:57 »

извиняюсь, но я не понял...
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Апрель 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();
   }
};
Записан

Qt 5.11/4.8.7 (X11/Win)
Mish_ka
Гость
« Ответ #4 : Апрель 26, 2011, 12:28 »

А если этот виджет я добавляю не из кода а из дизайнера форм?
Записан
madRoger
Гость
« Ответ #5 : Апрель 26, 2011, 13:10 »

Цитировать
А если этот виджет я добавляю не из кода а из дизайнера форм?
Тогда используйте eventFilter
Записан
Mish_ka
Гость
« Ответ #6 : Апрель 26, 2011, 13:20 »

Тогда используйте eventFilter

не могу разобраться как им пользоваться, подскажите пожалуйста.
Записан
madRoger
Гость
« Ответ #7 : Апрель 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 );
}
Записан
Mish_ka
Гость
« Ответ #8 : Апрель 26, 2011, 13:58 »

пасибо  Шокированный
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.279 секунд. Запросов: 22.