gpt4 book ai didi

c++ - 在 Qt 中使用 QGraphicsScene 函数时出错

转载 作者:行者123 更新时间:2023-11-28 06:33:07 25 4
gpt4 key购买 nike

我在运行一个qt项目时出现错误,我无法理解是什么原因

错误:

'class MainWindow' has no member named 'setSceneRect' 'class MainWindow' has no member named 'setScene' `mapToScene' was not declared in this scope

代码:

主窗口.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 的实例。我认为您应该将 View 添加到主窗口,而不是 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 中拥有自定义类的实例。

关于c++ - 在 Qt 中使用 QGraphicsScene 函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27201231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com