Название: QwtScaleWidget Отправлено: karpenko1989 от Январь 23, 2012, 15:35 Добрый день. Требуется нарисовать шкалу
(http://s2.ipicture.ru/uploads/20120119/NlN5CSrl.jpg) В библиотека есть класс для их отображения - QwtScaleWidget. Но у меня это сделать никак не получается. Хотелось бы увидеть код для подключения данного виджета. Название: Re: QwtScaleWidget Отправлено: popper от Январь 23, 2012, 19:00 А на каком этапе проблема? Приложение компилируется?
Посмотри в примерах использование. Ошибка также может быть в части размещения виджета в компоновщике Название: Re: QwtScaleWidget Отправлено: karpenko1989 от Январь 24, 2012, 07:20 Создаю виджет
Код:
Название: Re: QwtScaleWidget Отправлено: alexman от Январь 24, 2012, 11:18 void QwtPlot::setAxisScale(int axisId, double min, double max, double step = 0)
ну а там в исходниках глянь... Название: Re: QwtScaleWidget Отправлено: karpenko1989 от Январь 24, 2012, 12:20 setAxisScale задает шкалу, привязанную к графику, а мне нужно нарисовать только отдельную шкалу, без графика.
Название: Re: QwtScaleWidget Отправлено: alexman от Январь 24, 2012, 12:46 void QwtPlot::setAxisScale(int axisId, double min, double max, double step = 0) - задает диапазон и шаг для определенной шкалы график.
Цитировать ну а там в исходниках глянь... посмотри что внутри происходит, так как QwtPlot для шкал использует QwtScaleWidget...Название: Re: QwtScaleWidget Отправлено: karpenko1989 от Январь 25, 2012, 08:25 Хорошо, спасибо, я попытаюсь разобраться с этим.
Тогда, раз уж речь в теме идет про Qwt, попробую задать еще один вопрос. Возможно ли средствами библиотеки Qwt отобразить на одном графике несколько кривых (до 9) с разным масштабом? Выглядеть это должно примерно так: (http://s1.ipicture.ru/uploads/20120125/Hy02EKnn.jpg) Название: Re: QwtScaleWidget Отправлено: popper от Январь 25, 2012, 11:19 Вроде бы можно установить две разные шкалы для левой и правой осей графика.
Для каждой кривой можно установить левую или правую шкалу методом Код: void QwtPlotItem::setYAxis (int axis); Название: Re: QwtScaleWidget Отправлено: karpenko1989 от Январь 25, 2012, 12:25 Вроде бы можно установить две разные шкалы для левой и правой осей графика. Для каждой кривой можно установить левую или правую шкалу методом Код: void QwtPlotItem::setYAxis (int axis); К сожалению так сделать не получается, ось Y рисуется только одна Название: Re: QwtScaleWidget Отправлено: alexman от Январь 25, 2012, 14:22 Можно рисовать шкалы как элемент сцены...
Название: Re: QwtScaleWidget Отправлено: karpenko1989 от Январь 25, 2012, 15:44 Можно рисовать шкалы как элемент сцены... а можно поподробнее?, я с qt только начал потихоньку разбиратьсяНазвание: Re: QwtScaleWidget Отправлено: alexman от Январь 25, 2012, 16:39 1. Ну делаешь наследника от QwtPlotItem и рисуешь шкалу. В результате на сцене будет две шкалы (наследники от QwtPlotItem) и два графика.
2. Можно просто в лайаут добавить вертикальный QwtScaleWidget (*) | QwtPlot. Шкала из QwtPlot будет автоматом забиваться нужными данными, а содержимым (*) сам будешь управлять. Этот способ, наверное, проще будет чем 1. Название: Re: QwtScaleWidget Отправлено: iroln от Январь 25, 2012, 19:15 Хорошо, спасибо, я попытаюсь разобраться с этим. Зачем такие извращения то? Больше двух масштабов никто не делает (по крайней мере я ни разу не видел), поэтому для этого и нет инструментов. Если нужно отображать на одних осях графики с разным масштабом, то нужно масштабировать значения самих графиков, а в легенде писать: График --1 x 10, График 2 x 100, и т.д.Тогда, раз уж речь в теме идет про Qwt, попробую задать еще один вопрос. Возможно ли средствами библиотеки Qwt отобразить на одном графике несколько кривых (до 9) с разным масштабом? Название: Re: QwtScaleWidget Отправлено: Белый пони от Январь 25, 2012, 22:48 Вот и Уве Ратман думает, что это извращение.
Но задачи бывают разные. Добрые люди сделали патч для более чем двух осей (в комментах пишут, что только для qwt 6.0.0) - http://sourceforge.net/tracker/?func=detail&aid=3297826&group_id=13693&atid=313693 Название: Re: QwtScaleWidget Отправлено: karpenko1989 от Январь 26, 2012, 12:42 Вот и Уве Ратман думает, что это извращение. Огромное всем спасибо. Данный патч это то что мне нужно.Но задачи бывают разные. Добрые люди сделали патч для более чем двух осей (в комментах пишут, что только для qwt 6.0.0) - http://sourceforge.net/tracker/?func=detail&aid=3297826&group_id=13693&atid=313693 Название: Re: QwtScaleWidget Отправлено: Белый пони от Январь 26, 2012, 13:36 Вот и Уве Ратман думает, что это извращение. Огромное всем спасибо. Данный патч это то что мне нужно.Но появился вопрос. Данный патч можно установить автоматически, или изменения нужно вносить в файлы вручную?Но задачи бывают разные. Добрые люди сделали патч для более чем двух осей (в комментах пишут, что только для qwt 6.0.0) - http://sourceforge.net/tracker/?func=detail&aid=3297826&group_id=13693&atid=313693 Я пробовал на Ubuntu 10.10 автоматически. Не получилось, я не стал разбираться и аккуратненько поправил файлы в ручную, скорее всего это не оптимальный способ:) Название: Re: QwtScaleWidget Отправлено: karpenko1989 от Январь 26, 2012, 14:47 Установил патч. При запуске приложения, выводится много предупреждений:
Код: --> d_data->canvasRect.setRect(39,50,1097,560); Создаю новую кривую, подключаю ее к графику: Код: curv2 = new QwtPlotCurve(QString("U2(t)")); Название: Re: QwtScaleWidget Отправлено: Белый пони от Январь 26, 2012, 15:06 Установил патч. При запуске приложения, выводится много предупреждений: Код: --> d_data->canvasRect.setRect(39,50,1097,560); Я так понимаю, это просто отладочная информация. Я просто закоментил в исходниках все qDebug'и, что такого не писалось. Цитировать Создаю новую кривую, подключаю ее к графику: Код: curv2 = new QwtPlotCurve(QString("U2(t)")); Методами QwtPlot::enableAxis и QwtCurve::setAxes . Название: Re: QwtScaleWidget Отправлено: karpenko1989 от Январь 26, 2012, 15:29 Код: ошибка: 'class QwtPlot' has no member named 'setAxes' В установленном патче есть метод Код: QwtPlotItem::setAxes Пишу так: Код: int xb = QwtPlot::xBottom; Но ось попрежнему одна. Название: Re: QwtScaleWidget Отправлено: Белый пони от Январь 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 Название: Re: QwtScaleWidget Отправлено: karpenko1989 от Январь 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 Огромное спасибо, все заработало. Вот только в левом верхнем угле формы появился непонятный артефакт: (http://imglink.ru/pictures/27-01-12/7182a1ec02a328e51c34e1c51337fb63.jpg) И последнее. Так, как оси рисуются сейчас нельзя понять какая ось к какой кривой относится. Можно ли рисовать ось Y другим цветом (так чтобы цвет ось совпадал с цветом кривой), или хотя бы изменить цвет подписи оси? Название: Re: QwtScaleWidget Отправлено: Белый пони от Январь 27, 2012, 10:13 Огромное спасибо, все заработало. Вот только в левом верхнем угле формы появился непонятный артефакт: (http://imglink.ru/pictures/27-01-12/7182a1ec02a328e51c34e1c51337fb63.jpg) И последнее. Так, как оси рисуются сейчас нельзя понять какая ось к какой кривой относится. Можно ли рисовать ось Y другим цветом (так чтобы цвет ось совпадал с цветом кривой), или хотя бы изменить цвет подписи оси? У меня такой же артефакт был, думаю это глюк патча. Цветные оси сделать можно, я как-то видел в инете примеры, погугли что-то типа "qwt color scale draw" . Название: Re: QwtScaleWidget Отправлено: karpenko1989 от Январь 27, 2012, 10:16 Спасибо за помощь.
Название: Re: QwtScaleWidget Отправлено: karpenko1989 от Январь 30, 2012, 13:01 Добрый день, прошу оказать помощь еще по одному моменту при работе с Qwt с несколькими осями Y.
Создаю 2 кривые с разными осями Код:
К ним соответственно подключаю 2 объекта стандартного класса Zoomer Код: d_zoomer[0] = new Zoomer( xb, yl, При увеличении, например, участка по оси X от 0 до 1, увеличивается участок от 0 до 0.12 и.т.д При работе с одной осью координат все увеличивается как надо. Название: Re: QwtScaleWidget Отправлено: Белый пони от Январь 30, 2012, 18:44 Я про зумеры не знаю, не пользщовался ни разу :( Может кто другйо подскажет...
Название: Re: QwtScaleWidget Отправлено: iroln от Январь 30, 2012, 19:35 Предполагаю, что зуммер ничего не знает о ваших нескольких осях и масштабирует по какой-то одной. Ну это так навскидку.
|