Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: бага в QSlider
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
Tux-oid
Код:
main.cpp
#include "progressbar.h"

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
#include "progressbar.h"

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
#ifndef PROGRESSBAR_H
#define PROGRESSBAR_H

class QMouseEvent;

class ProgressBar : public QSlider
{
Q_OBJECT

public:
    explicit ProgressBar(Qt::Orientation, QWidget *parent = 0);

signals:
    void pbValueChanged(int);

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

#endif // PROGRESSBAR_H


slider.pro
SOURCES +=  \
    main.cpp \
    progressbar.cpp

HEADERS += \
    progressbar.h


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

void ProgressBar::mouseReleaseEvent (QMouseEvent* event)
Tux-oid
Нет. Event вызывается лишь раз.
Алексей1153
class ProgressBar: ...
{
   bool m_bMouseEventInProcess;
};


ProgressBar::ProgressBar(...):...
{
   m_bMouseEventInProcess=false;
}

void ProgressBar::mouseReleaseEvent (QMouseEvent* event)
{
        if(m_bMouseEventInProcess)return;
        m_bMouseEventInProcess=true;

        if (event->button() == Qt::LeftButton)
        {
            ...
        }

        m_bMouseEventInProcess=false;

}


только не забывать, что код должен пройти через сброс флага, и то вернёшься return'ом - и сообщения больше не обработаются. Либо делать оболочку для флага
Алексей1153
Форум был недоступен, когда я понял, что я понял не то )) Рекурсии неоткуда взяться в показанном коде, но она всё же имеется где-то
Tux-oid
Похоже это бага Qt. Такое наблюдается только в Qt 4.6.3 на линуксе. В Qt 4.5.0 на винде такого не наблюдается.

Кто-нибудь может проверить?
DEADHUNT
Цитата(Tux-oid @ 13.8.2010, 15:07) *
Кто-нибудь может проверить?

собери исходники в архив, попробую в линуксе с Qt 4.6.3
Tux-oid
вот
DEADHUNT
всё правильно работает, только если щёлкнуть в какое нибудь место он передвигается, потом примерно через секунду ещё немного передвигается(выравнивается относительно мыши).
molchanoviv
Qt 4.6.3 + Linux openSuSE. Бага есть. Ползунок сперва перемещается к месту клика, а затем уходит к краю.
Litkevich Yuriy
Tux-oid, при создании сообщения подчищай код, чтобы он был более компактен, старайся сводить к минимуму пустые строки.
По оформлению сообщений читай тут: Справка по кнопкам и тэгам форума
Алексей1153
WXP SP3
Qt 4.7.0
- такая же фигня, ползунок выравнивается слева от курсора после окончания движения. Но не уползает никуда - один раз дёрнулся и всё
Litkevich Yuriy
тему разделил: Qt Creator: ошибка в редакторе форм
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.