Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT] Рисование графика 
:(
    Опции темы
rcdimon
Дата 25.10.2009, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: нет
Всего: 2



Я начинающий в QT.

Возникла необходимость написать программу, отображающая график. График должен строиться в режиме реального времени. Данные приходят на COM порт и каждый раз при поступлении следующих данных график должен дорисовываться. Некий самописец.

Мне удалось с помощью QPainter нарисовать график по заранее определенному масиву данных, а вот осуществить его "дорисовку" не получается. Ведь рисовать можно только в ::paintEvent. 

Какой самый простой метод сделать рисование линии по событию? Например нажатию на кнопку, или приходу данных с ком-порта и т.д.?
PM MAIL ICQ   Вверх
Pion
Дата 25.10.2009, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 21.2.2006

Репутация: нет
Всего: 1



наверное, вызвать update в методе... Update в свою очередь вызовет repaint.
PM MAIL   Вверх
rcdimon
Дата 25.10.2009, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: нет
Всего: 2



Я пробовал, но при этом начинает подтормаживать...
PM MAIL ICQ   Вверх
CuteBunny
Дата 27.10.2009, 05:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 14.2.2008

Репутация: 1
Всего: 1



А если юзать qwtlib???

Там точно помню в одном из примеров график рисовался в режиме реального времени, но данные были рандомные?
PM MAIL   Вверх
rcdimon
Дата 27.10.2009, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: нет
Всего: 2



Вобщем я тоже смотрю в сторону QWT. Установил, примеры покурил. Однако происходит странная вещь- программа нормально компилируется и запускается, но сразу закрывается с кодом завершения 1. Никаких ошибок опять же не выводит.

Вот код.

Код

Test_qwt::Test_qwt(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);

    double X1[20], Y1[20],X2[20], Y2[20];
    int Size,i;

    Size = 20;

    for (i=0;i<20;i++){
        X1[i] = rand()/32;
        Y1[i] = rand()/32;
        X2[i] = rand()/32;
        Y2[i] = rand()/32;
    }

    QwtPlot *myPlot = new QwtPlot(tr("Test"), this);

    // add curves
    QwtPlotCurve *curve1 = new QwtPlotCurve("Curve 1");
    QwtPlotCurve *curve2 = new QwtPlotCurve("Curve 2");

    curve1->setPen(QPen(Qt::red));
            curve2->setPen(QPen(Qt::blue));

    // copy the data into the curves
    curve1->setData(X1,Y1,Size);
    curve2->setData(X2,Y2,Size);

    curve1->attach(myPlot);
    curve2->attach(myPlot);

    // finally, refresh the plot
    myPlot->replot();

}


Если делать отладку по шагам, то вылетает с кодом 1 на строке

Код

QwtPlot *myPlot = new QwtPlot(tr("Test"), this);


В чем может быть проблема? У меня VS2008 QT4.5.0 QWT5.2.0
PM MAIL ICQ   Вверх
CuteBunny
Дата 28.10.2009, 06:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 14.2.2008

Репутация: 1
Всего: 1



Думаю вот эти переменные лучше описать, как члены класса (private конечно же):

Код

    QwtPlot *myPlot;
    QwtPlotCurve *curve1;
    QwtPlotCurve *curve2;


Потом уже создавать их в конструкторе. Еще, я так понял, что в QDesigner'е, вы не используете плагины для работы с qwt? Так гораздо легче, если уж вы
используете шаблоны gui.



PM MAIL   Вверх
ecspertiza
Дата 28.10.2009, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 4
Всего: 5



С какой скоростью приходят данные с прибора?

Я реализовал тестовый примерчик рисования графика при помощи painterEvent(), посмотри может поможет, тормозов не замечал, данные приходят рандомом по таймеру 10 раз в секунду.



Присоединённый файл ( Кол-во скачиваний: 191 )
Присоединённый файл  Graphick.rar 1,71 Kb


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0931 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.