QT - przechwycenie klawisza (keypressed)

0

Witam, jako że ucze sie Qt to naklepałem taki kod:

main.cpp
https://4programmers.net/Pastebin/9085

player.cpp
https://4programmers.net/Pastebin/9086

player.h
https://4programmers.net/Pastebin/9087

Co tu jest nie tak, już próbuje i próbuje i nadal nie wychodzi....
Tam są 2 linijki z qDebug - sprawdzałem czy dobry adres jest zwracany no i jest dobry, ten sam.

Ktoś mógłby mnie troszkę naprowadzić? ;)

2

Obiekt wskazywany przez pl nie jest dodane ani do sceny ani rodzica, który jest przypisany do sceny.
Efekt jest taki, że nie otrzymuje żadnych zdarzeń.
Do sceny dodajesz inny obiekt tworzony przez Player ale nie ma między nimi żadnej relacji typu rodzić dziecko (typowej dla QGraphicsScene).

Po kiego grzyba korzystasz z pastebin? Spokojnie mogłeś wkleić kod tutaj.

Jak poprawisz tak powinno zadziałać:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QGraphicsScene *scene = new QGraphicsScene();

    Player *pl = new Player(50, 50, 30, 30);
    scene->addItem(pl);

    QGraphicsView view(scene);
    view.show();

    return app.exec();
}

I wywal pole Player::m_pl.

0

Hmm. To gdzie wtedy będę miał jakby uchwyt do mojego rectangla jak wyrzucę pole m_pl? :o

2

No to po co Player dziedziczy po QGraphicsRectItem?
Rozumiesz na czym polega dziedziczenie?

0

Coś tam czytałem ale chyba za mało wiem.

Po tym co kazałeś poprawić wszystko działa, dzięki za pomoc!

0

A jeszcze zapytam...

No bo w tym modelu co przedstawiłem mam klase, która ma jeden kwadrat. A co w przypadku, gdybym chciał żeby klasa player zawierała 2 kwadraty?

0

No bo w tym modelu co przedstawiłem mam klase, która ma jeden kwadrat. A co w przypadku, gdybym chciał żeby klasa player zawierała 2 kwadraty?

potrzeba ci podstaw c++, vectory, listy itd. Przystopuj z qt i prób na razie jakieś program konsolowe. Poszukaj tutoriali do qt nawet na youtube są.

1

Dodaj kolejne elementy jako dzieci (dodaj do rodzica) http://doc.qt.io/qt-5/qgraphicsrectitem.html#QGraphicsRectItem-2 :

Player::Player(int x, int y, int w, int h, QGraphicsItem *parent)
    : QGraphicsRectItem(x, y, w, h, parent)
{
    // dzięki this Player jest automatycznie właścicielem obiektu, więc delete jest nie potrzebne
    auto child = new QGraphicsRectItem(w/4, h/4, w/2, h/2, this); 
    child->setPen(Qt:red);
    child->setBrush(Qt::blue);
}

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