【问题标题】:Error while using QGraphicsScene functions in Qt在 Qt 中使用 QGraphicsScene 函数时出错
【发布时间】:2014-11-29 10:29:14
【问题描述】:

我在运行 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;

【问题讨论】:

  • 我不建议你运行这段代码,它会消耗你所有的内存。您在 mainwidow 的构造函数中为 mainwindow 分配内存。您的构造函数调用另一个构造函数,该构造函数调用另一个 abd 另一个。你需要完全重写你的代码。

标签: c++ qt qgraphicsscene scene


【解决方案1】:

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

gridLayout->addWidget(view);

您应该在QGraphicsScene 上致电setSceneRect

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 中拥有自定义类的实例。

【讨论】:

  • 谢谢你的回答解决了前两个错误,但我仍然有这个错误:`mapToScene' is not declared in this scope
  • 您的代码中是否也使用了mapToScene?我没有看到。
  • 抱歉,我已经编辑了帖子。它在 mousePressEvent 函数中
  • mapToSceneQGraphicsView 的函数。我已经更新了答案。
  • 非常感谢,现在我没有错误了。但是当我点击运行时,我没有出现任何窗口。无论如何我都会接受你的回答,这非常有帮助。
猜你喜欢
  • 1970-01-01
  • 2012-03-17
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
  • 2010-09-21
相关资源
最近更新 更多