anonymous@RULINUX.NET~# Last login: 2024-12-25 22:21:24
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

[Qt]Глюки с MouseMoveEvent

Мне нужно отлавливать событие передвижения ползунка в прогрессбаре. коннектить valueChanged со слотом обработки не вариант. Поэтому я решил унаследоваться от QSlider и отлавливать MouseMoveEvent.

Реализация:

cpp-qt
void ProgressBar::mouseMoveEvent (QMouseEvent* event )
{
        event->ignore();
        double k = ((double)event->x())/((double)width());
        int a = k*(maximum());
        setValue(a);
        emit pbValueChanged(a);
}
 

Собственно теперь проблема. Если в системе использутеся тема позволяющая перетаскивать окна за содержимое без нажатия кнопки Alt(Oxygen-transperent, QtCurve) то при перемещении ползунка он сдвигается на 10 пикселов и останавливается, при этом начинает передвигаться само окно за курсором. Остальные ползунки работают нормально. В темах которые не позволяют таскать окно за содержимое(Redmond, Plastique) такого тоже не происходит.

Tux-oid(*) (2010-08-13 08:59:00)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.6) Gecko/20100626 SUSE/3.6.6-1.2 Firefox/3.6.6

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: [Qt]Глюки с MouseMoveEvent от Tux-oid 2010-08-13 08:59:00
avatar
Скрыть

Re: [Qt]Глюки с MouseMoveEvent

>Поэтому я решил унаследоваться от QSlider и отлавливать MouseMoveEvent.

это вот это не вариант. что будешь делать если его станут перетаскивать хоткеями? и почему с valueChanged не вариант?

anonymous(*)(2010-08-13 10:03:18)

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100402 Linux Mint/8 (Helena) Firefox/3.5.9
[#] [Добавить метку] [Редактировать] Ответ на: Re: [Qt]Глюки с MouseMoveEvent от anonymous 2010-08-13 10:03:18
avatar
Скрыть

Re: [Qt]Глюки с MouseMoveEvent

>и почему с valueChanged не вариант?
А ты глянь на libqmmpui, поймешь. Сырой он еще. Существует не очень давно. Хоткеи там кстати через библиотеку обрабатываются. Там не было только обработки передвижения мышью. Да и KeyPressEvent для виджета отловить не сложно.

Tux-oid(*)(2010-08-13 10:18:01)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.6) Gecko/20100626 SUSE/3.6.6-1.2 Firefox/3.6.6
[#] [Добавить метку] [Редактировать] Ответ на: Re: [Qt]Глюки с MouseMoveEvent от Tux-oid 2010-08-13 10:18:01
avatar
Скрыть

Re: [Qt]Глюки с MouseMoveEvent

хм. тогда мб стоит использовать mouseReleaseEvent вместо move?

anonymous(*)(2010-08-13 10:29:04)

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100402 Linux Mint/8 (Helena) Firefox/3.5.9
[#] [Добавить метку] [Редактировать] Ответ на: Re: [Qt]Глюки с MouseMoveEvent от anonymous 2010-08-13 10:29:04
avatar
Скрыть

Re: [Qt]Глюки с MouseMoveEvent

А с mouseReleaseEvent происходит еще более фееричные глюки. Такая конструкция:

main.cpp

cpp-qt
#include "progressbar.h"
#include

int main(int argc, char * argv[])
{
        QApplication app(argc, argv);
        ProgressBar *m_slider = new ProgressBar (Qt::Horizontal);
        m_slider->show();
        return app.exec();
}
 

progressbar.cpp:

cpp-qt
#include "progressbar.h"
#include
#include

ProgressBar::ProgressBar(Qt::Orientation orientation, QWidget *parent) :
        QSlider(parent)
{
        setOrientation(orientation);
}

void ProgressBar::mouseReleaseEvent (QMouseEvent* event)
{
        if (event->button() == Qt::LeftButton)
        {
                event->ignore();
                double k = ((double)event->x())/((double)width());
                int a = k*(maximum());
                setValue(a);
        }
}
 

progressbar.h:

cpp-qt
#ifndef PROGRESSBAR_H
#define PROGRESSBAR_H

#include

class QMouseEvent;

class ProgressBar : public QSlider
{
Q_OBJECT
public:
        explicit ProgressBar(Qt::Orientation, QWidget *parent = 0);

signals:

        void pbValueChanged(int);
public slots:

protected:
        void mouseReleaseEvent ( QMouseEvent* event );
};

#endif // PROGRESSBAR_H
 

slider.pro:

ini

SOURCES += \
    main.cpp \
    progressbar.cpp

HEADERS += \
    progressbar.h

 

при клике по слайдеру он потихоньку доходит до конца. Это что бага Куте, или я чего-то не понимаю?

Tux-oid(*)(2010-08-13 12:48:17)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.6) Gecko/20100626 SUSE/3.6.6-1.2 Firefox/3.6.6
Этот тред читают 1 пользователь:
Анонимных: 1
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!