crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Анимация по таймеру, через модель-представление
Battle Coder
  опции профиля:
сообщение 27.12.2010, 9:30
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 27.12.2010
Пользователь №: 2307

Спасибо сказали: 0 раз(а)




Репутация:   0  


Просьба особо не ругать и больно ногами не пинать за мой быдлокод... я пока ещё только учусь. :)
Итак, что мне нужно. Мне нужно сделать анимацию, изменяющуюся по таймеру. Сначала беру одну картинку, и вставляю её на сцену (в качестве фона), потом пихаю ещё 21 картинку (эллипсы маленького размера), присваиваю им некоторый начальный цвет. А потом мне надо этот цвет менять с течением времени...
Координаты 21 точки беру из одного файла (points.txt), а показания цвета с другого. Надо, чтобы цвет менялся с течением времени.
Для справки - это типа ЭЭГ(электроэнцефалограмма), хочу её визуализировать.

Сначала пробовал всё это вписать в конструктор виджета - не сработало... я видел только последний результат всего - перерисовывалось всё всего один раз. А мне с каждой итерацией перерисовку (примерно два раза в секунду будет оптимально).
Перекинул в метод paint - теперь вообще ничего не отображает.

Буду благодарен за любую помощь. %(

qteeg.tar.gz
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
arial
  опции профиля:
сообщение 27.12.2010, 11:25
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 39
Регистрация: 27.9.2009
Пользователь №: 1121

Спасибо сказали: 9 раз(а)




Репутация:   0  


Косяков очень много. Вот подставил костыли, сильно не углубляясь в код. Точки моргают теперь.

mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QGraphicsScene>
#include <QTimer>
#include <QGraphicsItem>
#include <QFile>
#include <QTextStream>
#include <QHash>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QGraphicsScene scene;
//    QTimer *timer;

    QHash<int, QGraphicsEllipseItem *> pElItems;
    QFile valuefile;
    QTextStream filestream;
    int a[21];
public slots:
    void update_timeout();
};

#endif // MAINWINDOW_H


mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDebug>
#include <QGraphicsItem>
#include <QFile>
#include <QTextStream>
#include <QDebug>
#include <QTime>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->graphicsView->setScene(&scene);
    QGraphicsPixmapItem* pPixmapItem;
    pPixmapItem = scene.addPixmap(QPixmap("1020top.gif"));
    // "фон"
    QFile pointsfile;
    pointsfile.setFileName("points.txt");
    pointsfile.open(QIODevice::ReadOnly);
    QTextStream pfileStream(&pointsfile);
    int x[21];
    int y[21];
    // координаты точек
    int i;
    QString str;
    for (i=0; i!=21; i++) {
        str = pfileStream.readLine();
        sscanf(str.toLocal8Bit(),"%d %d\n",x+i,y+i);
    }
    pointsfile.close();

    valuefile.setFileName("points.txt");
    valuefile.open(QIODevice::ReadOnly);
    filestream.setDevice(&valuefile);
//    int a[21];
    // значения

    for (i=0; i<21; i++) {
        QGraphicsEllipseItem *const item = new QGraphicsEllipseItem(0,&scene);
        item->setBrush(QColor(255,0,0,255));
        item->setRect(x[i],y[i],10,10);
        pElItems.insert(i, item);
//        pElItem[i]->setFlags(QGraphicsEllipseItem::ItemIsMovable);
    }
    // рисуем все точки

    QTimer::singleShot(1000, this, SLOT(update_timeout()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::update_timeout() {
    static bool change = true;
    int color = 0;
    if (change) {
        color = 255;
        change = false;
    } else {
        change = true;
    }

    if (!filestream.atEnd()) {
        QString str = filestream.readLine();
        sscanf(str.toLocal8Bit(),"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n",a,a+1,a+2,a+3,a+4,a+5,a+6,a+7,a+8,a+9,a+10,a+11,a+12,a+13,a+14,a+15,a+16,a+
17,a+18,a+19,a+20,a+21);
        for (int i=0; i<21; i++) {
            pElItems[i]->setBrush(QColor(255,color,0,255));
        }
    }

    QTimer::singleShot(1000, this, SLOT(update_timeout()));
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 27.12.2010, 21:37
Сообщение #3


фрилансер
******

Группа: Участник
Сообщений: 2900
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(arial @ 27.12.2010, 13:25) *
sscanf(str.toLocal8Bit(),"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n",a,a+1,a+2,a+3,a+4,a+5,a+6,a+7,a+8,a+9,a+10,a+11,a+12,a+13,a+14,a+15,a+16,a
+
17,a+18,a+19,a+20,a+21);

я, конечно, и сам лентяй... Но чтоб настолько )) ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 4.8.2020, 5:16