crossplatform.ru

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


  Ответ в Анимация по таймеру
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Алексей1153 Дата 27.12.2010, 21:37
 
Цитата(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);

я, конечно, и сам лентяй... Но чтоб настолько )) ;)
arial Дата 27.12.2010, 11:25
  Косяков очень много. Вот подставил костыли, сильно не углубляясь в код. Точки моргают теперь.

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()));
}
Battle Coder Дата 27.12.2010, 9:30
  Просьба особо не ругать и больно ногами не пинать за мой быдлокод... я пока ещё только учусь. :)
Итак, что мне нужно. Мне нужно сделать анимацию, изменяющуюся по таймеру. Сначала беру одну картинку, и вставляю её на сцену (в качестве фона), потом пихаю ещё 21 картинку (эллипсы маленького размера), присваиваю им некоторый начальный цвет. А потом мне надо этот цвет менять с течением времени...
Координаты 21 точки беру из одного файла (points.txt), а показания цвета с другого. Надо, чтобы цвет менялся с течением времени.
Для справки - это типа ЭЭГ(электроэнцефалограмма), хочу её визуализировать.

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

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

qteeg.tar.gz
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 14:29