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

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

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

Сообщений: 960


Просмотр профиля
« : Июль 29, 2014, 13:43 »

Помогите понять почему не отображается крайне левое значение шкалы
Вот код
Код
C++ (Qt)
MyWidget::MyWidget(QWidget *parent) :
   QWidget(parent)
{
   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);
 
   d_thermo->setScaleEngine(new QwtLinearScaleEngine);
 
   d_thermo->setScaleMaxMinor(5);
   d_thermo->setScaleMaxMajor(2);
   d_thermo->setScale(min,max);
   d_thermo->setValue(2.0e-7);
 
 
   d_wheel = new QwtWheel(this);
   d_wheel->setRange(-9,-4);
   d_wheel->setValue(-8);
   d_wheel->setOrientation(Qt::Horizontal);
   d_wheel->setSingleStep(1);
 
   d_label = new QLabel(this);
 
   QHBoxLayout *layout = new QHBoxLayout(this);
   layout->addWidget(d_thermo);
   layout->addWidget(d_wheel);
   layout->addWidget(d_label);
 
   setNum(d_wheel->value());
 
   connect(d_wheel,SIGNAL(valueChanged(double)),this,SLOT(setNum(double)));
   connect(d_wheel,SIGNAL(valueChanged(double)),this,SLOT(setScale(double)));
}
 
MyWidget::~MyWidget()
{
}
 
void MyWidget::setNum(double num)
{
   QString text;
   text.setNum(num, 'f', 2);
   d_label->setText(text);
}
 
void MyWidget::setScale(double value)
{
   qDebug()<<value;
 
   double min = pow(10,value-2);
   double max = pow(10,value);
 
   d_thermo->setScaleEngine(new QwtLinearScaleEngine);
   d_thermo->setScale(pow(10,value-2),pow(10,value));
 
   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);
}
 
 
Записан
vizir.vs
Гость
« Ответ #1 : Июль 29, 2014, 15:00 »

А если так написать?
Код:
d_thermo->setScaleMaxMajor(3);

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

Сообщений: 960


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

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

Сообщений: 2130



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

А если так написать?
Код:
d_thermo->setScaleMaxMajor(3);
не сработает.
предлагаю заменить d_thermo->setScale(min,max) на d_thermo->setScale(0,max)
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


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

но у меня до нуля минимальное значение не доходит,
оно может быть очень маленьким, но только не нулем

В слоте setScale при прокрутке wheel устанавливается новый диапазон шкалы
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



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

d_thermo->setScaleMaxMajor(100)
тоже поможет. только эффект плохой...
мне кажется, что это особенности либы
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


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

 Непонимающий да вы так уверены
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


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

d_thermo->setScaleMaxMajor(100)
тоже поможет. только эффект плохой...
мне кажется, что это особенности либы

Да действительно помогло.
Только такой вариант меня не устраивает Грустный
Записан
vizir.vs
Гость
« Ответ #8 : Июль 29, 2014, 15:17 »

а попробуй через
Код:
QwtLinearScaleEngine->divedScale
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


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

и что это даст?
Записан
vizir.vs
Гость
« Ответ #10 : Июль 29, 2014, 15:37 »

с помощью QwtScaleDiv можно расставить подписи и метки на оси. А QwtLinearScaleEngine->divedScale позволит сделать это автоматически.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


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

Да походу действительно это особенности либы.
Поменял диапазон шкалы 0 до 100 и все норм.
И как от этого избавится???
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


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

с помощью QwtScaleDiv можно расставить подписи и метки на оси. А QwtLinearScaleEngine->divedScale позволит сделать это автоматически.

Сделал это, но не помогло
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



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

Да походу действительно это особенности либы.
Поменял диапазон шкалы 0 до 100 и все норм.
И как от этого избавится???
Я скажу больше.
Вы можете поставить диапазон 1-100. Получите тот же эффект. Просто либа пытается округлить значения на шкале, соответственно, минимальное круглое значение (0) лежит вне шкалы... Даже так называемый тик отсутствует в начале шкалы
Советую почитать про void QwtThermo::setScaleDraw ( QwtScaleDraw * scaleDraw ), правда, я с этим не разбирался
Записан
vizir.vs
Гость
« Ответ #14 : Июль 29, 2014, 15:52 »

А если без QwtLinearScaleEngine->divedScale, а напрямую создать
Код:
QwtScaleDiv::QwtScaleDiv	(	double 	lowerBound,
double upperBound,
const QList< double > & minorTicks,
const QList< double > & mediumTicks,
const QList< double > & majorTicks
)
По-идеи он уже здесь ни куда не денется.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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