C++ Qt框架:如何在布局中显示QGraphicsView?
我很难在QVBoxLayout对象中显示QGraphicsView,我不知道出了什么问题。我的代码经过编译,因此不会抛出错误。这是我的简单代码。(我是QT和C++ NeWB)。在底部,我向布局中添加了一个QPushButton小部件,显示得很好。提前谢谢你的帮助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
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中,您可以确保对象具有父对象,并且当您删除父对象时,子对象也将自动删除。例如,如果创建一个局部变量,它将进入堆栈,并在函数退出时删除。我希望这有帮助。