Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Qt] Tworzenie edytora map

Ostatnio zmodyfikowano 2011-02-16 15:07
Autor Wiadomość
programista12
Temat założony przez niniejszego użytkownika
» 2011-01-21 19:44:09
Dzięki wielkie. Jeszcze tylko jedno pytanko: mam klasę Mapa, czy dobrym pomysłem jest, aby dziedziczyła z klas QGraphicsScene i QGraphicsItem?
P-26785
malan
» 2011-01-21 19:47:00
Ja tam bym je dał jako pola prywatne.
P-26786
programista12
Temat założony przez niniejszego użytkownika
» 2011-01-21 20:28:47
Popróbowałem trochę z tym i mam problem. Podczas kompilacji wyskakują błędy:
"undefined reference to 'vtable for Mapa'"
"collect2: Id returned 1 exit status"
Kod w pliku mapa.h:
C/C++
class Mapa
    : public QGraphicsScene
{
    Q_OBJECT
private:
    QGraphicsScene * map_scene;
public:
    QGraphicsScene * GetMapScene();
    void Show();
    Mapa();
protected:
    virtual void mousePressEvent( QGraphicsSceneMouseEvent * event );
};

Plik mapa.cpp:
C/C++
QGraphicsScene * Mapa::GetMapScene()
{
    return this->map_scene;
}

void mousePressEvent( QGraphicsSceneMouseEvent * event )
{
    map_scene->addRect( 30, 30, 100, 100 ); //dodaję recta do sprawdzenia czy działa zdarzenie
}

void Mapa::Show()
{
    map_scene->addRect( 0, 0, 10, 10 );
}

Mapa::Mapa()
{
    map_scene = new QGraphicsScene( 0, 0, 1024, 768 );
    map_scene->setBackgroundBrush( Qt::gray );
}
W funkcji main:
C/C++
QApplication a( argc, argv );
MainWindow w;
Mapa mapka;
w.show();
mapka.Show();
w.GVSetScene( mapka.GetMapScene() );
return a.exec();
P-26787
BlackDante
» 2011-01-21 22:45:39
o ile się nie mylę to najpierw musisz stworzyć obiekt klasy QGraphicsView do którego za pomocą funkcji addScene czy tez za pomocą konstruktora QGraphicsView(QGrpahicsScene &scene); dodajesz i dopiero QGraphicsView możesz wyświetlać. bo QGraphicsScene nie zawiera funkcji show();
P-26811
programista12
Temat założony przez niniejszego użytkownika
» 2011-01-22 09:06:04
A w którym miejscu miałbym utworzyć ten obiekt i jak miałoby to wyglądać?
P-26819
malan
» 2011-01-22 12:05:47
Tak btw, to dziedziczenie jest niepotrzebne. Albo jedno albo drugie- albo tworzysz obiekt klasy
QGraphicsScene
 i dajesz go jako pole klasy
Mapa
 albo dziedziczysz.
Twoje rozwiązanie umożliwia coś takiego:
C/C++
Mapa map;
map.addRect( 69, 69, 69, 69 );
map.Show();
Ma to jakiś sens? Ja nie widzę żadnego. Mógłby mi ktoś pokazać, czy to ma jakieś sensowne zastosowanie, bo ja naprawdę nie wiem :(.

/edit:
A w którym miejscu miałbym utworzyć ten obiekt i jak miałoby to wyglądać?
C/C++
QGraphicsScene * map_scene = new QGraphicsScene( 0, 0, 1024, 768 );
map_scene->setBackgroundBrush( Qt::gray );

QGraphicsView * view = new QGraphicsView( map_scene, parent );
Jakoś tak...
P-26825
programista12
Temat założony przez niniejszego użytkownika
» 2011-02-06 17:11:53
Odświeżam. Mógłby ktoś podać kod przykładowej klasy, żeby można było nią zmieniać scenę w QGraphicsView, albo żeby posiadała zmienną typu QGraphicsScene, żeby można nią było obsługiwać zdarzenia myszki, rysować po scenie? Ja się z tym męczę, ale nic mi nie wychodzi. Te zdarzenia nie działają. Bardzo proszę o pomoc. Ty, pixelmaster, dużo mówiłeś na ten temat, może mógłbyś napisać przykładową klasę? Byłbym wdzięczny.
P-27908
BlackDante
» 2011-02-06 19:05:04
http://doc.qt.nokia.com/latest/examples-graphicsview.html wystarczy trochę poszukać, tutaj masz przykładowe programy wraz z kodami źródłowymi i wyjaśnieniami :)
P-27926
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona