我在运行qt项目时遇到错误,我无法理解是什么原因
错误:
'class MainWindow'没有名为'setSceneRect''类的成员 MainWindow'没有名为'setScene'的成员`mapToScene'没有 在此范围内声明
代码:
mainwindow.cpp:
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;
答案 0 :(得分:1)
首先,不要在其构造函数中创建MainWindow
的实例。我认为您应该将视图添加到主窗口而不是gridLayout->addWidget( new MainWindow() );
:
gridLayout->addWidget(view);
您应该致电setSceneRect
上的QGraphicsScene
:
scene->setSceneRect(50, 50, 350, 350);
此外,您应该通过调用QGraphicsView
QGraphicsView::setScene
指定一个场景
QGraphicsView * view = new QGraphicsView(this) ;
view->setScene(scene);
mapToScene
是QGraphicsView
的函数。所以你应该有类似的东西:
QPointF pt = view->mapToScene(e->pos());
最后我要提一下,你可以拥有一个继承自QGraphicsView
并实现mousePressEvent
的自定义类以及与场景和绘图有关的其他内容。然后,您可以在MainWindow
。