mousePressEvent
메서드를 사용할 수 있도록 QGraphicsView
을 직접 만들었습니다. 그런 다음 "새"위젯을 MainWindow에 추가합니다. 이제 해당 객체의 장면에 액세스해야하지만 액세스하는 데 문제가 있습니다.QGridLayout의 사용자 지정 개체에서 Qt 액세스 변수
privqgraphicsview.cpp
#include "privqgraphicsview.h"
#include <QPointF>
MyQGraphicsView::MyQGraphicsView(QWidget *parent) :
QGraphicsView(parent)
{
scene = new QGraphicsScene();
this->setSceneRect(-320, -290, 660, 580);
this->setScene(scene);
this->setRenderHint(QPainter::Antialiasing);
}
privqgraphicsview.h
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsEllipseItem>
#include <QMouseEvent>
class MyQGraphicsView : public QGraphicsView
{
Q_OBJECT
public:
explicit MyQGraphicsView(QWidget *parent = 0);
QGraphicsScene * scene;
public slots:
void mousePressEvent(QMouseEvent * e);
};
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "privqgraphicsview.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// gridLayout is defined in mainwindow.h
gridLayout = new QGridLayout(ui->centralWidget);
gridLayout->addWidget(new MyQGraphicsView());
}
MainWindow::~MainWindow()
{
delete ui;
}
지금 , 나는 MainWindow
에있는 버튼을 가지고 있으며 클릭 이벤트는 MyQGraphicsView
의 scene
에서 gridLayout
까지의 포인트를 연결하고 싶습니다. 나는 이런 식으로 뭔가를 시도 :
void MainWindow::on_connectPointsPB_clicked()
{
QLayoutItem *myView = gridLayout->itemAt(0);
// trying to draw a simple line, code below does not check anything, I am aware of it
dynamic_cast<MyQGraphicsView *>(myView)->scene->addLine(10,10,50,50, QPen(Qt::red, 3));
}
그리고 버튼을 클릭 한 후 그 종료 (충돌) 응용 프로그램을 수행합니다.
'MainWindow'의 멤버로서'MyQGraphicsView' 오브젝트를 추가하는 것이 제 생각에는 최선의 방법이라고 생각합니다. – Croolman
@Cololman 나는 너와 절대적으로 동의한다. – m7913d