在Qt中使用QGraphicsScene函数时出错

Error while using QGraphicsScene functions in Qt

本文关键字:函数 出错 QGraphicsScene Qt      更新时间:2023-10-16

我在运行qt项目时遇到错误,我不明白是什么原因

错误:

'class MainWindow' 没有名为 'setSceneRect' 的成员 'class MainWindow' 没有名为 'setScene' 的成员 'mapToScene' 不是 在此范围内声明

代码:

主窗口.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));
}

主窗口.h:

private:
Ui::MainWindow *ui;
QGraphicsScene * scene;
首先不要

在其构造函数中创建MainWindow的实例。我认为您应该将视图添加到主窗口,而不是gridLayout->addWidget( new MainWindow() );

gridLayout->addWidget(view);

您应该致电setSceneRect QGraphicsScene

scene->setSceneRect(50, 50, 350, 350);

此外,您还应该通过调用QGraphicsView::setScene将场景分配给QGraphicsView

QGraphicsView * view = new QGraphicsView(this) ;
view->setScene(scene);

mapToSceneQGraphicsView的函数。所以你应该有这样的东西:

QPointF pt = view->mapToScene(e->pos());

最后,我应该提到,你可以有一个自定义类,它继承QGraphicsView并实现mousePressEvent以及与场景和绘图相关的其他东西。然后,您可以在MainWindow中拥有自定义类的实例。