C++ 在Qt中使用Qgraphicscene函数时出错
当我运行一个qt项目时,我会出错,我不知道原因是什么 错误: “class MainWindow”没有名为“SetSCEnvironment”的成员类 “MainWindow”没有名为“setScene”的成员,“mapToScene”没有 在此范围内声明 守则: mainwindow.cpp:C++ 在Qt中使用Qgraphicscene函数时出错,c++,qt,qgraphicsscene,scene,C++,Qt,Qgraphicsscene,Scene,当我运行一个qt项目时,我会出错,我不知道原因是什么 错误: “class MainWindow”没有名为“SetSCEnvironment”的成员类 “MainWindow”没有名为“setScene”的成员,“mapToScene”没有 在此范围内声明 守则: mainwindow.cpp: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setup
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
QGridLayout * gridLayout = new QGridLayout(ui->centralWidget);
gridLayout->addWidget( new MainWindow() );
scene = new QGraphicsScene();
this->setSceneRect(50, 50, 350, 350);
this->setScene(scene);
}
void MainWindow::mousePressEvent(QMouseEvent * e)
{
double rad = 1;
QPointF pt = mapToScene(e->pos());
scene->addEllipse(pt.x()-rad, pt.y()-rad, rad*2.0, rad*2.0,
QPen(), QBrush(Qt::SolidPattern));
}
mainwindow.h:
private:
Ui::MainWindow *ui;
QGraphicsScene * scene;
首先,不要在其构造函数中创建
MainWindow
的实例。我认为不是gridLayout->addWidget(newmainwindow())代码>应将视图添加到主窗口:
gridLayout->addWidget(view);
您应该在qgraphicscene
上调用setsceninstallet
:
scene->setSceneRect(50, 50, 350, 350);
QGraphicsView * view = new QGraphicsView(this) ;
view->setScene(scene);
您还应该通过调用QGraphicsView::setScene
将场景指定给QGraphicsView
:
scene->setSceneRect(50, 50, 350, 350);
QGraphicsView * view = new QGraphicsView(this) ;
view->setScene(scene);
mapToScene
是QGraphicsView
的一个功能。所以你应该有这样的东西:
QPointF pt = view->mapToScene(e->pos());
最后我要提到的是,您可以拥有一个自定义类,该类继承自QGraphicsView
,并实现mousePressEvent
以及与场景和绘图相关的其他内容。然后,您可以在主窗口中拥有自定义类的实例
谢谢您的回答解决了前两个错误,但我仍然有这个错误:`mapToScene'未在此范围内声明。您在代码中是否也使用了mapToScene
?对不起,我已经编辑过这篇文章了。它位于mousePressEvent函数中mapToScene
是QGraphicsView
的函数。我已经更新了答案。非常感谢你,现在我没有错误了。但是,当我单击“运行”时,我看不到任何窗口。无论如何,我都会接受你的回答,这非常有帮助。我不建议你运行这段代码,它会消耗你所有的内存。在mainwidow的构造函数中为mainwindow分配内存。构造函数调用另一个构造函数,该构造函数调用另一个abd另一个。你需要完全重写你的代码。