Erorr при использовании функций QGraphicsScene в Qt

Я получаю ошибки при запуске проекта QT, и я не могу понять, в чем причина

ошибки:

Класс 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

Решение

Прежде всего не делайте пример 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,

1

Другие решения


По вопросам рекламы [email protected]