getMouseMove i wykrywanie kolorów

0

Witam, muszę napisać grę w której trzeba kursorem myszy "przejść" z jednego punktu (zielonego), do drugiego (czerwonego) po czarnej linii. Niestety, program nie działa jak trzeba - kiedy kursor jest na białym polu timer się zatrzymuje, ale kiedy najedzie się na zielony punkt - nie działa dalej. Możecie pomóc?
Przepraszam za brzydki kod...

Ważne pliki:
obraz.cpp

#include "obraz.h"
#include <QImage>
#include <QMessageBox>
#include <QPoint>

obraz::obraz(QWidget *parent) :
    QGraphicsView(parent)
{
    //QImage *image2 = new QImage(300, 300, QImage::Format_RGB32);
    this->setMouseTracking(true);
    this->setAlignment(Qt::AlignCenter);
    this->setVisible(true);
    this->setGeometry(0, 80, 303, 503);
    this->gra=false;
    image.load("c:/j.bmp");
    this->generujObraz();
}

void obraz::mouseMoveEvent(QMouseEvent *event)
{
    this->piksel = this->image.pixel(event->x(), event->y());
    QColor kolor(this->piksel);
    int r, g, b, a;
    kolor.getRgb(&r, &g, &b, &a);

    if (r==0 && g==255 && b==0) {
        if (gra==false) {
            gra=true;
            emit naStarcie();
        }
    } else if (r==255 && g==0 && b==0 && gra==true) {
        gra=false;
        this->koniecGry();
        emit koniec();
    } else if (!(r==255 && g==255 && b==255 && gra==true)) {
        gra=false;
        emit pozaMapa();
    }
}

void obraz::koniecGry()
{
    QMessageBox *wiadomosc = new QMessageBox;
    wiadomosc->setText("Wygrałeś");
}

void obraz::generujObraz()
{
    //QRgb kolor;
    //kolor = qRgb(0, 255, 0);

    //QPoint punkt;
    //punkt.setX(5);
    //punkt.setY(5);
    //this->image.setPixel(punkt, kolor);
    scena.addPixmap(QPixmap::fromImage(image));
    this->setScene(&scena);
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "obraz.h"
#include "wynik.h"
#include <QTimer>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    wynik *Wynik = new wynik(this);
    obraz *Obraz = new obraz(this);
    QTimer *timer = new QTimer(this);

    timer->setInterval(1);
    QObject::connect(Obraz, SIGNAL(pozaMapa()), timer, SLOT(stop()));
    QObject::connect(Obraz, SIGNAL(koniec()), timer, SLOT(stop()));
    QObject::connect(Obraz, SIGNAL(naStarcie()), Wynik, SLOT(wynikStartowy()));
    QObject::connect(Obraz, SIGNAL(naStarcie()), timer, SLOT(start()));
    QObject::connect(timer, SIGNAL(timeout()), Wynik, SLOT(zmniejszCzas()));
    //timer->start(1);
}

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

QGraphicsView przesuwało obraz, a poza tym zamiast 0, 0, 0 wpisywałem 255, 255, 255. Działa ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1