crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Перехватить событие от колеса
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Алексей1153 Дата 17.3.2017, 22:59
  Анна, поэкспериментировал.

setFocusPolicy(Qt::ClickFocus) работает прекрасно в том смысле, что реально не ставит фокус при вращении колеса над спином. Однако спин всё равно меняет значение. Вылечил так

CMyWidget::CMyWidget()
{
...
    ui->spinBox->setFocusPolicy(Qt::ClickFocus);//фокус на спин можно установить только кликом
    ui->spinBox->installEventFilter(this);//сообщение колеса обработаем
}


//сообщение колеса обработаем
bool CMyWidget::eventFilter(QObject* o, QEvent* e)
{
    if(o==ui->spinBox && e->type()==e->Wheel)
    {
        if(!ui->spinBox->hasFocus())
        {
            e->ignore();
            return true;
        }
    }


    return QDialog::eventFilter(o,e);
}


то есть, при помощи findChildren тебе нужно настроить все спины и там, где у меня "o==ui->spinBox" уточнять, что обрабатывается спин, лежащий там, где нужно
Анна Дата 17.3.2017, 15:29
 
Цитата(Алексей1153 @ 17.3.2017, 14:44) *
Анна, для начала можно попробовать всем QSpinBox выключить фокус по колесу

QSpinBox* p=...;
p->setFocusPolicy(Qt::ClickFocus)


и для поиска всех виджетов может пригодиться
findChildren<QSpinBox*>();


Фокус с setFocusPolicy не проходит. У меня иногда складывается впечатление, что никакой разницы между этими флажками нет.
Как только мышка оказывается над QSpinBox, он перехватывает события от колеса.

За findChildren() спасибо. Я как раз на что-нибудь похожее надеялась, только найти не смогла.
Алексей1153 Дата 17.3.2017, 14:44
  Анна, для начала можно попробовать всем QSpinBox выключить фокус по колесу

QSpinBox* p=...;
p->setFocusPolicy(Qt::ClickFocus)


и для поиска всех виджетов может пригодиться
findChildren<QSpinBox*>();

Анна Дата 17.3.2017, 13:52
  Задача такая:
Есть: внутри QScrollArea длинный виджет с кучей дочерних виджетов, у которых в свою очередь есть дочерние QSpinBox (вложенность виджетов в общем случае большая).
Нужно: чтобы при вращении колеса осуществлялась только прокрутка длинного виджета в QScrollArea.
Проблема: при прокрутке длинного виджета, если курсор мыши попадает в QSpinBox, прокрутка прекращается и начитает меняться значение QSpinBox.

Перехват в eventFilter() события колеса только для длинного виджета не помогает.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 26.3.2017, 2:30