Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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++ Qt框架:如何在布局中显示QGraphicsView?_C++_Qt - Fatal编程技术网

C++ Qt框架:如何在布局中显示QGraphicsView?

C++ Qt框架:如何在布局中显示QGraphicsView?,c++,qt,C++,Qt,我很难在QVBoxLayout对象中显示QGraphicsView,我不知道出了什么问题。我的代码经过编译,因此不会抛出错误。这是我的简单代码。(我是QT和C++ NeWB)。在底部,我向布局中添加了一个QPushButton小部件,显示得很好。提前谢谢你的帮助 QGraphicsScene scene; QGraphicsView view(&scene); view.setBackgroundBrush(QImage(":/images/bg/tile.png")); view.se

我很难在QVBoxLayout对象中显示QGraphicsView,我不知道出了什么问题。我的代码经过编译,因此不会抛出错误。这是我的简单代码。(我是QT和C++ NeWB)。在底部,我向布局中添加了一个QPushButton小部件,显示得很好。提前谢谢你的帮助

QGraphicsScene scene;
QGraphicsView view(&scene);
view.setBackgroundBrush(QImage(":/images/bg/tile.png"));
view.setCacheMode(QGraphicsView::CacheBackground);
QPixmap pixmap("images/icons/dsp.gif");
QGraphicsPixmapItem* dsp = scene.addPixmap(pixmap);
view.show();
vlayout->addWidget(&view);
vlayout->addWidget(new QPushButton("some button here"));

没有足够的上下文,所以我不能确切地说出发生了什么。但是,如果这些都在函数中,那么您就声明了局部变量,一旦函数退出,这些局部变量就消失了。如果您处于主要位置,您的代码应该如下所示,但它可能会崩溃:

 QApplication app(argc, argv);
  QGraphicsScene scene;
  QGraphicsView view(&scene);

  QWidget widget;
  view.setBackgroundBrush(Qt::red);
  QVBoxLayout vlayout;
  widget.setLayout(&vlayout);
  vlayout.addWidget(&view);
  vlayout.addWidget(new QPushButton("some button here"));
  widget.show();
我建议动态分配对象:

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

  QApplication app(argc, argv);
  QGraphicsScene* scene = new QGraphicsScene;
  QGraphicsView* view = new QGraphicsView(scene);

  QWidget *widget = new QWidget;
  view->setBackgroundBrush(Qt::red);
  QVBoxLayout* vlayout = new QVBoxLayout(widget);

  vlayout->addWidget(view);
  vlayout->addWidget(new QPushButton("some button here"));
  widget->show();
  return app.exec();
}

不要忘记删除父对象,这样它就不会泄漏内存

动态分配(我认为这意味着使用新的操作符)和非动态分配有什么区别?作用域是否存在差异?当您在堆上创建对象(使用
new
动态分配)时,该对象将继续存在,直到您使用
delete
操作符将其删除。在Qt中,您可以确保对象具有父对象,并且当您删除父对象时,子对象也将自动删除。例如,如果创建一个局部变量,它将进入堆栈,并在函数退出时删除。我希望这有帮助。