Russian Qt Forum
Май 03, 2024, 23:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: QWT(QwtThermo)  (Прочитано 8922 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #15 : Июль 29, 2014, 16:04 »

Да походу действительно это особенности либы.
Поменял диапазон шкалы 0 до 100 и все норм.
И как от этого избавится???
Я скажу больше.
Вы можете поставить диапазон 1-100. Получите тот же эффект. Просто либа пытается округлить значения на шкале, соответственно, минимальное круглое значение (0) лежит вне шкалы... Даже так называемый тик отсутствует в начале шкалы
Советую почитать про void QwtThermo::setScaleDraw ( QwtScaleDraw * scaleDraw ), правда, я с этим не разбирался

М-да интересно,
но в примерах есть интересный вариант
и там шкала идет от 10-1000(но правда она логарифмическая )
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #16 : Июль 29, 2014, 16:38 »

Значит выход один: делать логарифмическую шкалу  Веселый Шучу

Base class for scale engines.

A scale engine tries to find "reasonable" ranges and step sizes for scales.

The layout of the scale can be varied with setAttribute().

Qwt offers implementations for logarithmic and linear scales.

Но, у меня неуспешно удалось поиграть с атрибутами.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #17 : Июль 29, 2014, 16:48 »

Мне никак не понять, что такое reference... относительно неё можно построить симметричную шкалу, либо шкалу, включающую это значение.

Вы не хотите использовать 0 в минимуме, потому что будет выводиться часть лишнего colorMap?
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #18 : Июль 29, 2014, 16:54 »

Вы не хотите использовать 0 в минимуме, потому что будет выводиться часть лишнего colorMap?

нет не хочу
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #19 : Июль 29, 2014, 16:56 »

Значит выход один: делать логарифмическую шкалу  Веселый Шучу

Base class for scale engines.

A scale engine tries to find "reasonable" ranges and step sizes for scales.

The layout of the scale can be varied with setAttribute().

Qwt offers implementations for logarithmic and linear scales.

Но, у меня не успешно удалось поиграть с атрибутами.

Я так и не понял что вы предлагайте?
Использовать
Код:
QwtLinearScaleEngine::setAtribute
« Последнее редактирование: Июль 29, 2014, 16:59 от demaker » Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #20 : Июль 29, 2014, 17:01 »

я предлагаю поиграть с атрибутом IncludeReference.
Я так понял, что если задать этот референс 0, то он будет включен в шкалу, а сам ColorMap смещен.

забавно, что этот виджет даже при установке собственного шага не даёт желаемого результата.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #21 : Июль 29, 2014, 17:06 »

А можете привести пример кода плз Улыбающийся
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #22 : Июль 29, 2014, 17:16 »

А можете привести пример кода плз Улыбающийся
К сожалению, я не разобрался, как пользоваться атрибутами. Мне удалось только инвертировать направление шкалы.
Возможно, я ошибаюсь насчет атрибутов.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #23 : Июль 29, 2014, 17:20 »

пытался сделать так
Код
C++ (Qt)
QwtLinearScaleEngine *scale = new QwtLinearScaleEngine;
scale->setAttribute(QwtLinearScaleEngine::IncludeReference);
scale->setReference(min);
...
 

но, что не получилось
или я что-тол тоже не понял

а пример кода с инвертированием шкалы можете показать...
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #24 : Июль 29, 2014, 17:35 »

пытался сделать так
Код
C++ (Qt)
QwtLinearScaleEngine *scale = new QwtLinearScaleEngine;
scale->setAttribute(QwtLinearScaleEngine::IncludeReference);
scale->setReference(min);
...
 

но, что не получилось
или я что-тол тоже не понял

а пример кода с инвертированием шкалы можете показать...
Я примерно то же делал. И 0 в параметр передавал - результата не было.
Код сегодня уже показать не смогу, так как уже далеко от компьютера, но, было что-то такое: scale->setAttribute(QwtLinearScaleEngine::Inverted);
Только задавать нужно до присвоения движка.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #25 : Июль 30, 2014, 11:01 »

Пытался и инвертировать и 0 передавать ничего не получилось
Не могу разобраться почему
Код
C++ (Qt)
   d_thermo = new QwtThermo(this);
   d_thermo->setOrientation(Qt::Horizontal);
   d_thermo->setScalePosition(QwtThermo::LeadingScale);
 
   double min = 1e-10;
   double max = 1e-8;
 
   QwtLinearColorMap *colorMap = new QwtLinearColorMap();
   colorMap->setMode(QwtLinearColorMap::FixedColors);
   colorMap->addColorStop(0.0,QColor("green"));
   colorMap->addColorStop((0.8*max)/(max-min),QColor("yellow"));
   colorMap->addColorStop((0.98*max)/(max-min),QColor("red"));
   d_thermo->setColorMap(colorMap);
 
   QwtLinearScaleEngine *scale = new QwtLinearScaleEngine;
 
   scale->setAttribute(QwtLinearScaleEngine::IncludeReference);
   scale->setAttribute(QwtLinearScaleEngine::Inverted);
   scale->setReference(0.0);
 
   d_thermo->setScaleEngine(scale);//d_thermo->setScaleEngine(new QwtLinearScaleEngine);
 
   d_thermo->setScaleMaxMinor(5);
   d_thermo->setScaleMaxMajor(2);
   d_thermo->setScale(min,max);
 
   d_thermo->setValue(start_value);
 
   d_wheel = new QwtWheel(this);
   d_wheel->setRange(-11,-4);
   d_wheel->setValue(-8);
   d_wheel->setOrientation(Qt::Horizontal);
   d_wheel->setSingleStep(1);
 
   d_label = new QLabel(this);
 
   setNum(d_wheel->value());
 
   connect(d_wheel,SIGNAL(valueChanged(double)),this,SLOT(setNum(double)));
   connect(d_wheel,SIGNAL(valueChanged(double)),this,SLOT(setScale(double)));
 
   QHBoxLayout *layout = new QHBoxLayout(this);
   layout->addWidget(d_thermo);
   layout->addWidget(d_wheel);
   layout->addWidget(d_label);
 
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #26 : Июль 30, 2014, 12:48 »

Кажется, я наврал. У меня тоже не удается инвертировать. Видимо, вчера мне показалось, что я это сделал.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #27 : Июль 30, 2014, 13:24 »

Т.е я так понимаю не реально сделать так - чтобы минимальное значение по шкале было не ноль Непонимающий В замешательстве
Неужели нет свойств компонентов, чтобы можно было модернизировать шкалу?
« Последнее редактирование: Июль 30, 2014, 13:30 от demaker » Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.118 секунд. Запросов: 23.