Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我的QGraphicsView没有显示在Qt4的主窗口中?_C++_Qt4_Qgraphicsview - Fatal编程技术网

C++ 为什么我的QGraphicsView没有显示在Qt4的主窗口中?

C++ 为什么我的QGraphicsView没有显示在Qt4的主窗口中?,c++,qt4,qgraphicsview,C++,Qt4,Qgraphicsview,这可能是非常明显的,但我有一个新的Qt,无法理解它。我有一个简单的主窗口,其中有一个按钮。单击该按钮时,我想创建一个QGraphicscene,添加几行,然后在窗口中显示。但是,当我在窗口中运行此代码时,它不会显示 但是,如果我将其作为QApplication运行,它会显示得很好。我错过了什么 以下是主窗口中的代码: void TheDrawings::drawScene() { qDebug() << "Setting up Scene"; QGraphicsScene sc

这可能是非常明显的,但我有一个新的Qt,无法理解它。我有一个简单的主窗口,其中有一个按钮。单击该按钮时,我想创建一个QGraphicscene,添加几行,然后在窗口中显示。但是,当我在窗口中运行此代码时,它不会显示

但是,如果我将其作为QApplication运行,它会显示得很好。我错过了什么

以下是主窗口中的代码:

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();
作废取款::drawScene(){
qDebug()设置笔(笔);
rectItem->setBrush(Qt::灰色);
QGraphicsSimpleTextItem*textItem=新的QGraphicsSimpleTextItem(
“Amit Bahree”,0和场景);
text项目->设置位置(50,0);
QGraphicsSellipseitem*eclipseItem=新的QGraphicsSellipseitem(QRect(170,20,
100、75)、0和场景);
日食元素->设置点(QPen(Qt::暗蓝色));
日食->挫折(Qt::暗蓝色);
QGraphicsPolygonItem*polygonItem=新的QGraphicsPolygonItem(QPolygonF(

QVector()您的QGraphicsView需要一个主窗口的中心窗口(或任何您想将其放在上面的小部件)设置为父窗口。此外,您还需要“新建”视图和场景对象以将其放在堆上,这样drawScene完成后它们就不会被破坏。请参阅以下代码更改中的一个,这对您来说很好:

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();

希望这能有所帮助,因为你的QGraphicsView需要一个主窗口的中心窗口(或任何你想放在上面的小部件)来设置为父窗口。你还需要“新建”将视图和场景对象放置在堆中,以便在drawScene完成后它们不会被销毁。请参阅对代码进行的以下更改:

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();

希望这能有所帮助,因为

不确定视图是否确实需要父级,但确实需要在堆上分配(即新的).嗨,伙计们,这真是太好了。我想我知道出了什么问题-因为这不在堆上,它在可以重新绘制之前已经被清理干净了。e8johan,如果我不设置父窗口,它将显示为一个新窗口,我得到两个窗口,而不是一个。我想我可能需要为此设置另一个容器窗口。不确定你是否真的我不需要视图的父级,但您肯定需要在堆上分配(即新的).嗨,伙计们,这真是太好了。我想我知道出了什么问题-因为这不在堆上,在重新绘制之前它已经被清理干净了。e8johan,如果我不设置父窗口,那么它会显示为一个新窗口,我会有两个窗口,而不是一个。我想我可能需要为此设置另一个容器窗口。