2010-01-03 6 views
1

Ceci est probablement quelque chose de très évident, mais j'ai un nouveau Qt et ne peux pas le comprendre. J'ai une MainWindow simple qui a un bouton. Lorsque ce bouton est cliqué, je veux créer un QGraphicsScene, ajouter quelques lignes et ensuite montrer dans la fenêtre. Cependant quand je cours ce code dans une fenêtre il n'apparaît pas. MAIS, si je l'exécute comme QApplication, il se montre très bien. Qu'est-ce que je rate?Pourquoi mon QGraphicsView n'apparaît-il pas dans ma MainWindow en Qt4?

Voici le code dans le MainWindow:

void TheDrawings::drawScene() { 
qDebug() << "Setting up Scene"; 

QGraphicsScene scene(QRect(-50, -50, 400, 200)); 

QPen pen(Qt::red, 3, Qt::DashDotDotLine); 

QGraphicsRectItem *rectItem = new QGraphicsRectItem(QRect(-50, -50, 400, 
    200), 0, &scene); 
rectItem->setPen(pen); 
rectItem->setBrush(Qt::gray); 

QGraphicsSimpleTextItem *textItem = new QGraphicsSimpleTextItem(
    "Amit Bahree", 0, &scene); 
textItem->setPos(50, 0); 

QGraphicsEllipseItem *eclipseItem = new QGraphicsEllipseItem(QRect(170, 20, 
    100, 75), 0, &scene); 
eclipseItem->setPen(QPen(Qt::darkBlue)); 
eclipseItem->setBrush(Qt::darkBlue); 

QGraphicsPolygonItem *polygonItem = new QGraphicsPolygonItem(QPolygonF(
    QVector<QPointF>() << QPointF(10, 10) << QPointF(0, 90) 
    << QPointF(40, 70) << QPointF(80, 110) << QPointF(70, 20)), 
    0, &scene); 
polygonItem->setPen(QPen(Qt::darkGreen)); 
polygonItem->setBrush(Qt::yellow); 

qDebug() << "Setting up the view"; 
QGraphicsView view; 
view.setScene(&scene); 
view.show(); 

}

Répondre

4

votre QGraphicsView a besoin d'un centralwidget de la fenêtre principale (ou tout autre widget que vous voulez le mettre au-dessus de) à définir comme parent. De plus, vous devez "nouveau" vos objets de vue et de scène pour les mettre sur le tas afin qu'ils ne soient pas détruits une fois DrawScene terminé. Voir de suivre les changements à votre code fonctionnerait bien pour vous:

QGraphicsScene* scene = new QGraphicsScene(QRect(-50, -50, 400, 200)); 
... 
QGraphicsView* view = new QGraphicsView(ui->centralWidget); 
view->setScene(scene); 
view->setGeometry(QRect(50, 50, 400, 200)); 
view->show(); 

espérons que cette aide, ce qui est

+1

pas sûr que vous avez réellement besoin d'un parent pour la vue, mais vous devez certainement alloué sur le tas (c'est-à-dire nouveau). – e8johan

+0

Salut les gars, parfait qui a fonctionné. Je pense que je comprends ce qui ne va pas - comme ce n'était pas sur le tas, il était nettoyé avant qu'il puisse repeindre. e8johan, si je ne mets pas le parent, alors il apparaît comme un nouveau widget et j'ai deux fenêtres au lieu d'une. Je pense que je pourrais avoir besoin d'installer un autre widget de conteneur pour cela. – bahree

Questions connexes