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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: QwtScaleWidget  (Прочитано 11962 раз)
Белый пони
Гость
« Ответ #15 : Январь 26, 2012, 13:36 »

Вот и Уве Ратман думает, что это извращение.
Но задачи бывают разные. Добрые люди сделали патч для более чем двух осей (в комментах пишут, что только для qwt 6.0.0) - http://sourceforge.net/tracker/?func=detail&aid=3297826&group_id=13693&atid=313693
Огромное всем спасибо. Данный патч это то что мне нужно.Но появился вопрос. Данный патч можно установить автоматически, или изменения нужно вносить в файлы вручную?

Я пробовал на Ubuntu 10.10 автоматически. Не получилось, я не стал разбираться и аккуратненько поправил файлы в ручную, скорее всего это не оптимальный способ:)
Записан
karpenko1989
Гость
« Ответ #16 : Январь 26, 2012, 14:47 »

Установил патч. При запуске приложения, выводится много предупреждений:
Код:
--> d_data->canvasRect.setRect(39,50,1097,560);
yLeft[0] x=0.000000 y=50.000000 w=39.000000 h=560.000000
yBottom[20] x=39.000000 y=610.000000 w=1097.000000 h=27.000000
Left 0 Valid
Left 1 INValid
Left 2 INValid
Left 3 INValid
Left 4 INValid
Left 5 INValid
Left 6 INValid
Left 7 INValid
Left 8 INValid
Left 9 INValid
Я так понимаю это из-за того, что ось Y в данный момент подключена только одна.

Создаю новую кривую, подключаю ее к графику:
Код:
curv2 = new QwtPlotCurve(QString("U2(t)"));
curv2->attach(myPlot);
Но я никак не разберусь как подключить к кривой новую ось?
« Последнее редактирование: Январь 26, 2012, 14:51 от karpenko1989 » Записан
Белый пони
Гость
« Ответ #17 : Январь 26, 2012, 15:06 »

Установил патч. При запуске приложения, выводится много предупреждений:
Код:
--> d_data->canvasRect.setRect(39,50,1097,560);
yLeft[0] x=0.000000 y=50.000000 w=39.000000 h=560.000000
yBottom[20] x=39.000000 y=610.000000 w=1097.000000 h=27.000000
Left 0 Valid
Left 1 INValid
Left 2 INValid
Left 3 INValid
Left 4 INValid
Left 5 INValid
Left 6 INValid
Left 7 INValid
Left 8 INValid
Left 9 INValid
Я так понимаю это из-за того, что ось Y в данный момент подключена только одна.

Я так понимаю, это просто отладочная информация. Я просто закоментил в исходниках все qDebug'и, что такого не писалось.


Цитировать
Создаю новую кривую, подключаю ее к графику:
Код:
curv2 = new QwtPlotCurve(QString("U2(t)"));
curv2->attach(myPlot);
Но я никак не разберусь как подключить к кривой новую ось?

Методами QwtPlot::enableAxis и QwtCurve::setAxes .


Записан
karpenko1989
Гость
« Ответ #18 : Январь 26, 2012, 15:29 »

Код:
ошибка: 'class QwtPlot' has no member named 'setAxes'
такого метода нет.
В установленном патче есть метод
Код:
QwtPlotItem::setAxes


Пишу так:
Код:
int xb = QwtPlot::xBottom;
int yl = QwtPlot::yLeft;
curv1->setAxes(xb,yl);
ui->myPlot->enableAxis(yl);
int xb2 = QwtPlot::xBottom;
int yl2 = QwtPlot::yLeft;
curv2->setAxes(xb2,yl2);
ui->myPlot->enableAxis(yl2);

Но ось попрежнему одна.
« Последнее редактирование: Январь 26, 2012, 15:58 от karpenko1989 » Записан
Белый пони
Гость
« Ответ #19 : Январь 26, 2012, 16:17 »

xBottom, xTop, yLeft и yRight - это просто именованные числовые константы, соответсующие осям в оригинальном qwt.

после установки патча числовые значения, соответствующие осям будут: xBottom, xBottom+1, xBottom+2, ..., yLeft, yLeft+1, yLeft+2, ...

посмотри файл патча текстовым редктором, он как раз вносит эти изменения в qwt_plot.h :

Код:
Index: qwt_plot.h
===================================================================
--- qwt_plot.h (revision 1014)
+++ qwt_plot.h (working copy)
@@ -74,25 +74,19 @@
         READ grabProperties WRITE applyProperties )
 
 public:
-    //! \brief Axis index
-    enum Axis
-    {
-        //! Y axis left of the canvas
-        yLeft,
 
-        //! Y axis right of the canvas
-        yRight,
+    static const int axisCntBySide = 10;
+    static const int yLeft         = 0;
+    static const int yLeftMax      = yLeft      + axisCntBySide - 1;
+    static const int yRight        = yLeftMax   + 1;
+    static const int yRightMax     = yRight     + axisCntBySide - 1;
+    static const int xBottom       = yRightMax  + 1;
+    static const int xBottomMax    = xBottom    + axisCntBySide - 1;
+    static const int xTop          = xBottomMax + 1;
+    static const int xTopMax       = xTop       + axisCntBySide - 1;
+    static const int axisCnt       = xTopMax    + 1;
 
-        //! X axis below the canvas
-        xBottom,
 
-        //! X axis above the canvas
-        xTop,
-
-        //! Number of axes
-        axisCnt
-    };
-
     /*!
         Position of the legend, relative to the canvas.
Записан
karpenko1989
Гость
« Ответ #20 : Январь 27, 2012, 07:58 »

xBottom, xTop, yLeft и yRight - это просто именованные числовые константы, соответсующие осям в оригинальном qwt.

после установки патча числовые значения, соответствующие осям будут: xBottom, xBottom+1, xBottom+2, ..., yLeft, yLeft+1, yLeft+2, ...

посмотри файл патча текстовым редктором, он как раз вносит эти изменения в qwt_plot.h :

Код:
Index: qwt_plot.h
===================================================================
--- qwt_plot.h (revision 1014)
+++ qwt_plot.h (working copy)
@@ -74,25 +74,19 @@
         READ grabProperties WRITE applyProperties )
 
 public:
-    //! \brief Axis index
-    enum Axis
-    {
-        //! Y axis left of the canvas
-        yLeft,
 
-        //! Y axis right of the canvas
-        yRight,
+    static const int axisCntBySide = 10;
+    static const int yLeft         = 0;
+    static const int yLeftMax      = yLeft      + axisCntBySide - 1;
+    static const int yRight        = yLeftMax   + 1;
+    static const int yRightMax     = yRight     + axisCntBySide - 1;
+    static const int xBottom       = yRightMax  + 1;
+    static const int xBottomMax    = xBottom    + axisCntBySide - 1;
+    static const int xTop          = xBottomMax + 1;
+    static const int xTopMax       = xTop       + axisCntBySide - 1;
+    static const int axisCnt       = xTopMax    + 1;
 
-        //! X axis below the canvas
-        xBottom,
 
-        //! X axis above the canvas
-        xTop,
-
-        //! Number of axes
-        axisCnt
-    };
-
     /*!
         Position of the legend, relative to the canvas.

Огромное спасибо, все заработало. Вот только в левом верхнем угле формы появился непонятный артефакт:


И последнее. Так, как оси рисуются сейчас нельзя понять какая ось к какой кривой относится. Можно ли рисовать ось Y другим цветом (так чтобы цвет ось совпадал с цветом кривой), или хотя бы изменить цвет подписи оси?
« Последнее редактирование: Январь 27, 2012, 08:07 от karpenko1989 » Записан
Белый пони
Гость
« Ответ #21 : Январь 27, 2012, 10:13 »


Огромное спасибо, все заработало. Вот только в левом верхнем угле формы появился непонятный артефакт:


И последнее. Так, как оси рисуются сейчас нельзя понять какая ось к какой кривой относится. Можно ли рисовать ось Y другим цветом (так чтобы цвет ось совпадал с цветом кривой), или хотя бы изменить цвет подписи оси?

У меня такой же артефакт был, думаю это глюк патча.

Цветные оси сделать можно, я как-то видел в инете примеры, погугли что-то типа "qwt color scale draw" .
Записан
karpenko1989
Гость
« Ответ #22 : Январь 27, 2012, 10:16 »

Спасибо за помощь.
Записан
karpenko1989
Гость
« Ответ #23 : Январь 30, 2012, 13:01 »

Добрый день, прошу оказать помощь еще по одному моменту при работе с Qwt с несколькими осями Y.

Создаю 2 кривые с разными осями
Код:
    
    curv1 = new QwtPlotCurve("Amplitude");
    curv1->setRenderHint(QwtPlotItem::RenderAntialiased);
    curv1->setPen(QPen(Qt::red));
    int xb = QwtPlot::xBottom;
    int yl = QwtPlot::yLeft;
    curv1->setAxes(xb,yl);
    myPlot->enableAxis(yl);
   curv1->attach(myPlot);
///////
   curv2 = new QwtPlotCurve("Amplitude");
   curv2->setRenderHint(QwtPlotItem::RenderAntialiased);
   curv2->setPen(QPen(Qt::green));
   int xb2 = QwtPlot::xBottom;
   int yl2 = QwtPlot::yLeft+1;
   curv2->setAxes(xb2,yl2);
   myPlot->enableAxis(yl2);
   curv2->attach(myPlot);

К ним соответственно подключаю 2 объекта стандартного класса Zoomer
Код:
    d_zoomer[0] = new Zoomer( xb, yl,
    myPlot->canvas());
    d_zoomer[0]->setRubberBand(QwtPicker::RectRubberBand);
    d_zoomer[0]->setRubberBandPen(QColor(Qt::green));
    d_zoomer[0]->setTrackerMode(QwtPicker::ActiveOnly);
    d_zoomer[0]->setTrackerPen(QColor(Qt::white));

    d_zoomer[1] = new Zoomer(QwtPlot::xTop, QwtPlot::yRight,
         myPlot->canvas());

    d_zoomer1[0] = new Zoomer( xb2, yl2,
        myPlot->canvas());
    d_zoomer1[0]->setRubberBand(QwtPicker::RectRubberBand);
    d_zoomer1[0]->setRubberBandPen(QColor(Qt::green));
    d_zoomer1[0]->setTrackerMode(QwtPicker::ActiveOnly);
    d_zoomer1[0]->setTrackerPen(QColor(Qt::white));

    d_zoomer1[1] = new Zoomer(QwtPlot::xTop, QwtPlot::yRight,
         myPlot->canvas());

При увеличении, например, участка по оси X от 0 до 1, увеличивается участок от 0 до 0.12 и.т.д
При работе с одной осью координат все увеличивается как надо.
Записан
Белый пони
Гость
« Ответ #24 : Январь 30, 2012, 18:44 »

Я про зумеры не знаю, не пользщовался ни разу Грустный Может кто другйо подскажет...
Записан
iroln
Гость
« Ответ #25 : Январь 30, 2012, 19:35 »

Предполагаю, что зуммер ничего не знает о ваших нескольких осях и масштабирует по какой-то одной. Ну это так навскидку.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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