ich beschäftige mich seit kurzem mit Qt und möchte eine QGraphicsScene in einem QWidget laden. Ist dies möglich oder widersprechen sich die Konzepte von QGraphicsScene und QWidget?
Ich habe bereits folgendes ausprobiert:
Das offizielle Qt-Beispiel "colliding mice" habe ich modifiziert in der Datei main.cpp und die Klasse MyWidget hinzugefügt (Files mywidget.h und mywidget.cpp). Beim Kompilieren gab es keine Fehlermeldung. Leider war das Ergebnis war ein Bild mit grauem Inhalt statt umher irrenden Mäusen. Was habe ich an dieser Stelle vergessen?
Ich bin dankbar für eure Tipps! javascript:emoticon('
Achja, hier der modifizierte/neue Code:
main.cpp
Code: Alles auswählen
#include <QtGui>
#include <math.h>
#include "widget.h"
int main(int argc, char **argv)
{
QApplication app(argc, argv);
MyWidget window;
window.show();
return app.exec();
}
Code: Alles auswählen
#ifndef MYWIDGET_H_
#define MYWIDGET_H_
#include <QtGui>
#include <math.h>
#include "mouse.h"
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(QWidget *parent = 0);
~MyWidget() {}
};
#endif
mywidget.cpp
Code: Alles auswählen
#include "mywidget.h"
using namespace std;
static const int MouseCount = 7;
MyWidget::MyWidget(QWidget *parent) : QWidget(parent) {
QGraphicsScene scene;
scene.setSceneRect(-300, -300, 600, 600);
scene.setItemIndexMethod(QGraphicsScene::NoIndex);
for (int i = 0; i < MouseCount; ++i) {
Mouse *mouse = new Mouse;
mouse->setPos(::sin((i * 6.28) / MouseCount) * 200,
::cos((i * 6.28) / MouseCount) * 200);
scene.addItem(mouse);
}
QGraphicsView view(&scene);
view.setRenderHint(QPainter::Antialiasing);
view.setBackgroundBrush(QPixmap(":/images/cheese.jpg"));
view.setCacheMode(QGraphicsView::CacheBackground);
view.setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
view.setDragMode(QGraphicsView::ScrollHandDrag);
view.setWindowTitle(QT_TRANSLATE_NOOP(QGraphicsView, "Colliding Mice"));
view.resize(600, 600);
view.show();
setCentralView();
QTimer timer;
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
QObject::connect(&timer, SIGNAL(timeout()), &scene, SLOT(advance()));
timer.start(1000 / 33);
}