在Qt中使用QGraphicsScene函数时出错
Error while using QGraphicsScene functions in Qt
我在运行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);
mapToScene
是QGraphicsView
的函数。所以你应该有这样的东西:
QPointF pt = view->mapToScene(e->pos());
最后,我应该提到,你可以有一个自定义类,它继承QGraphicsView
并实现mousePressEvent
以及与场景和绘图相关的其他东西。然后,您可以在MainWindow
中拥有自定义类的实例。
相关文章:
- 类中私有结构的构造函数出错
- 字符串验证函数出错
- 我的类默认构造函数出错
- Dev-C++和Code::Blocks中的析构函数出错
- int对的哈希函数出错
- MSVC 编译器错误导致迭代器和友元函数出错
- 复制构造函数出错
- 使用 WinSock2 开发,使用 CreateThread() 函数出错
- 链接列表的Push_back函数出错
- 结构初始化中的隐式复制构造函数出错
- 异步函数出错
- 编译器错误消息错误:令牌之前的预期')' '*'。我的构造函数出错
- c++中使用std::bind和std::函数出错
- 在vector排序中使用c++模板函数出错
- 使用std::for_each lambda函数出错
- 二叉搜索树插入函数出错
- 调用类的函数出错
- c++使用删除函数出错
- 使用已删除的函数出错
- 调用构造函数出错