C++ 如何在QGraphicsCenter上绘制点(在鼠标单击上)?
我有以下代码来设置C++ 如何在QGraphicsCenter上绘制点(在鼠标单击上)?,c++,qt,qgraphicsscene,mouseclick-event,C++,Qt,Qgraphicsscene,Mouseclick Event,我有以下代码来设置qgraphicscene。我希望单击场景并在我单击的位置绘制一个点。我怎么能这样做?这是我当前的代码: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QGraphicsScene *scene; QGraphicsView *view = new QGraphic
qgraphicscene
。我希望单击场景并在我单击的位置绘制一个点。我怎么能这样做?这是我当前的代码:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QGraphicsScene *scene;
QGraphicsView *view = new QGraphicsView(this);
view->setGeometry(QRect(20, 50, 400, 400));
scene = new QGraphicsScene(50, 50, 350, 350);
view->setScene(scene);
}
更新:有一个名为
QGraphicsSceneMouseEvent
的新类,使这一过程变得更简单。
我刚刚在这里完成了一个使用它的示例:
它与下面的答案不同,因为它是qgraphicscene
的子类,而不是QGraphicsView
,并且它使用mouseEvent->scenePos()
,因此不需要手动映射坐标
你在正确的轨道上,但你还有一点要走 您需要子类化
QGraphicsView
,以便能够使用QMouseEvent
执行鼠标按下或鼠标释放操作
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsEllipseItem>
#include <QMouseEvent>
class MyQGraphicsView : public QGraphicsView
{
Q_OBJECT
public:
explicit MyQGraphicsView(QWidget *parent = 0);
signals:
public slots:
void mousePressEvent(QMouseEvent * e);
// void mouseReleaseEvent(QMouseEvent * e);
// void mouseDoubleClickEvent(QMouseEvent * e);
// void mouseMoveEvent(QMouseEvent * e);
private:
QGraphicsScene * scene;
};
注意使用maptosene()
使事件的pos()
正确映射到在场景上单击鼠标的位置
如果要使用表单,则需要将子类QGraphicsView
的实例添加到用户界面的centralWidget布局中
QGridLayout * gridLayout = new QGridLayout(ui->centralWidget);
gridLayout->addWidget( new MyQGraphicsView() );
或者,如果您的ui已经有了布局,它将如下所示:
ui->centralWidget->layout()->addWidget( new MyGraphicsView() );
如果不使用QMainWindow
和表单,则可以将其添加到QWidget
中,前提是为其设置布局,然后以类似方式将QGraphicsView
添加到该布局中。如果您不想在QGraphicsView
周围留有空白,只需调用show,不要将其放在不同的布局中
#include <QtGui/QApplication>
#include "myqgraphicsview.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyQGraphicsView view;
view.show();
return a.exec();
}
#包括
#包括“myqgraphicsview.h”
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
MyQGraphicsView视图;
view.show();
返回a.exec();
}
就这样。现在,使用QGraphicsView
及其与鼠标的交互非常危险
在使用
QGraphicsView
和qgraphicscene
时,一定要阅读和研究有关Qt的内容以及相关的有效方法。它们是非常强大的2D图形工具,可以有一点学习曲线,但它们是值得的。phyatt,非常感谢“注意使用mapToScene()使事件的pos()正确映射到鼠标在场景上单击的位置。”
#include <QtGui/QApplication>
#include "myqgraphicsview.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyQGraphicsView view;
view.show();
return a.exec();
}