Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: vintik от Март 29, 2013, 13:10



Название: QSlider рисование текущего значения
Отправлено: vintik от Март 29, 2013, 13:10
Господа, помогите плз!

В QSlider необходимо отображать его текущее значение над ползунком.
Как я вижу есть 2 способа:
1. Завести QLabel и двигать его по событию valueChanged(int)
2. Отрисовывать значение в paintEvent

Хотел бы разобраться со вторым случаем.
Делаю так
Код:
   void paintEvent(QPaintEvent *event)
   {
       int position = QStyle::sliderPositionFromValue(minimum(),
                                                      maximum(),
                                                      value(),
                                                      width());
       QDateTime dt;
       dt.setTime_t(value());

       QPainter painter(this);
       QFontMetrics fm(painter.font());

       painter.drawText(QRect(position, 0, fm.width(dt.toString("hh:mm:ss")), 20), dt.toString("hh:mm:ss"));
       QSlider::paintEvent(event);
   }

Получается примерно следующее
(http://img835.imageshack.us/img835/3015/sliderj.png) (http://imageshack.us/photo/my-images/835/sliderj.png/)

Пару проблем не могу решить.
1. Не понимаю как мне рисовать текущее значение, чтобы оно было чуточку выше ползунка (чтобы не перекрывалось)
2. Позиция (position) вычисляемая в коде не всегда в точности совпадает с позицией ползунка. Если ползунок в начале то position чуть левее ползунка.
   Если же ползунок в конце, то position переползает правее ползунка

     Спасибо


Название: Re: QSlider рисование текущего значения
Отправлено: carrygun от Март 29, 2013, 13:41
Может проще будет использовать QTooltip::showText()?


Название: Re: QSlider рисование текущего значения
Отправлено: vintik от Март 29, 2013, 13:43
Да, мне коллега уже посоветовал, но всё равно спасибо!


Название: Re: QSlider рисование текущего значения
Отправлено: Alex Custov от Март 29, 2013, 13:49
вызывай сперва QSlider::paintEvent(event), а потом только свой код


Название: Re: QSlider рисование текущего значения
Отправлено: vintik от Март 29, 2013, 13:57
Тоже вариант, но тогда всё равно имеет место некоторое "перекрытие"
(http://img27.imageshack.us/img27/7663/slider1l.png) (http://imageshack.us/photo/my-images/27/slider1l.png/)

По-прежнему остаётся проблема с вычислением позиции отображаемого текста


Название: Re: QSlider рисование текущего значения
Отправлено: BuRn от Март 30, 2013, 08:07
На сколько я знаю так обычно не делают , чем вас не устраивает вариант отображать значение слева, т.е. грубо говоря его менять, ведь наверняка после того как слайдер вы перетащите на другую позицию , значение слева обновится


Название: Re: QSlider рисование текущего значения
Отправлено: Igors от Март 30, 2013, 08:52
Подход с paintEvent выглядит "мелкотравчатым", меняйте уже отрисовку самого thnmb'а (через стиль или как)