crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> бага в QSlider, или я чего-то не понимаю
Tux-oid
  опции профиля:
сообщение 13.8.2010, 12:13
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 13.8.2010
Пользователь №: 1955

Спасибо сказали: 0 раз(а)




Репутация:   0  


Код:
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
  опции профиля:
сообщение 13.8.2010, 12:19
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2877
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


наверное, рекурсия в слоте

void ProgressBar::mouseReleaseEvent (QMouseEvent* event)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tux-oid
  опции профиля:
сообщение 13.8.2010, 12:23
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 13.8.2010
Пользователь №: 1955

Спасибо сказали: 0 раз(а)




Репутация:   0  


Нет. Event вызывается лишь раз.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 13.8.2010, 12:25
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2877
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


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
  опции профиля:
сообщение 13.8.2010, 13:39
Сообщение #5


фрилансер
******

Группа: Участник
Сообщений: 2877
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Форум был недоступен, когда я понял, что я понял не то )) Рекурсии неоткуда взяться в показанном коде, но она всё же имеется где-то
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tux-oid
  опции профиля:
сообщение 13.8.2010, 14:07
Сообщение #6


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 13.8.2010
Пользователь №: 1955

Спасибо сказали: 0 раз(а)




Репутация:   0  


Похоже это бага Qt. Такое наблюдается только в Qt 4.6.3 на линуксе. В Qt 4.5.0 на винде такого не наблюдается.

Кто-нибудь может проверить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 13.8.2010, 14:50
Сообщение #7


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


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

собери исходники в архив, попробую в линуксе с Qt 4.6.3
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tux-oid
  опции профиля:
сообщение 13.8.2010, 14:56
Сообщение #8


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 13.8.2010
Пользователь №: 1955

Спасибо сказали: 0 раз(а)




Репутация:   0  


вот
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 13.8.2010, 15:02
Сообщение #9


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


всё правильно работает, только если щёлкнуть в какое нибудь место он передвигается, потом примерно через секунду ещё немного передвигается(выравнивается относительно мыши).

Сообщение отредактировал DEADHUNT - 13.8.2010, 15:03
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
molchanoviv
  опции профиля:
сообщение 13.8.2010, 15:18
Сообщение #10


Старейший участник
****

Группа: Сомодератор
Сообщений: 597
Регистрация: 18.7.2008
Из: Саратов
Пользователь №: 238

Спасибо сказали: 41 раз(а)




Репутация:   5  


Qt 4.6.3 + Linux openSuSE. Бага есть. Ползунок сперва перемещается к месту клика, а затем уходит к краю.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 24.4.2019, 22:51