C++ 在QGraphicsView';海景
我有这个: mapdialog2.hC++ 在QGraphicsView';海景,c++,qt,C++,Qt,我有这个: mapdialog2.h namespace Ui { class MapDialog2; } class MapDialog2 : public QDialog { Q_OBJECT public: explicit MapDialog2(QWidget *parent = 0); ~MapDialog2(); protected: void closeEvent(QCloseEvent * event); void reject();
namespace Ui {
class MapDialog2;
}
class MapDialog2 : public QDialog
{
Q_OBJECT
public:
explicit MapDialog2(QWidget *parent = 0);
~MapDialog2();
protected:
void closeEvent(QCloseEvent * event);
void reject();
void mousePressEvent(QGraphicsSceneMouseEvent *event);
void wheelEvent(QWheelEvent* event);
private:
Ui::MapDialog2 *ui;
QGraphicsScene *scene;
};
这是:
mapdialog2.cpp
MapDialog2::MapDialog2(QWidget *parent) :
QDialog(parent),
ui(new Ui::MapDialog2)
{
ui->setupUi(this);
QGraphicsScene* scene = new QGraphicsScene(this);
scene->addPixmap(QPixmap(":/new/image/project_images/Screenshot from 2015-03-09 15:37:24.png"));
scene->activePanel();
ui->graphicsView->setDragMode(QGraphicsView::ScrollHandDrag);
for(int i=0; i<10; i++) {
scene->addRect(50+i*30,100,50,100, QColor(0,200,0,100),QColor(20+i*20,0,0,100));
}
ui->graphicsView->setScene(scene);
}
void QGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << "Debug Message";
QPointF mousePos(event->buttonDownScenePos(Qt::LeftButton).x(),
event->buttonDownScenePos(Qt::LeftButton).y());
qDebug() << mousePos;
}
MapDialog2::MapDialog2(QWidget*父项):
QDialog(父级),
ui(新ui::MapDialog2)
{
用户界面->设置用户界面(此);
Qgraphicscene*场景=新的Qgraphicscene(此);
场景->添加pixmap(QPixmap(:/new/image/project_images/Screenshot from 2015-03-09 15:37:24.png));
场景->活动面板();
ui->graphicsView->setDragMode(QGraphicsView::ScrollHandDrag);
对于(inti=0;iaddRect(50+i*30100,50100,QColor(0200,0100),QColor(20+i*20,0,0100));
}
ui->graphicsView->setScene(场景);
}
void qgraphicscene::mousePressEvent(qgraphicscenemouseevent*事件)
{
qDebug()按钮DownScenePos(Qt::LeftButton).x(),
事件->按钮DownScenePos(Qt::LeftButton.y());
qDebug()使用override
关键字来防止将来出现这种错误。在QDialog
中没有void mousePressEvent(QGraphicsSceneMouseEvent*event);
方法。现在还不清楚,你想捕获什么。顺便说一句,你知道什么是interhirance吗?你不能简单地编写自己的void qgraphicscenscenscene::mousePressEvent(qgraphicscenemouseevent*event)
方法重写它。您需要为它创建子类qgraphicscene
。排印…我的意思是继承我正在尝试捕捉场景qgraphicscene上的鼠标按下事件。如果您实现mousepressvent,我建议也实现mouseMoveEvent和mousereleasevent。此外,调用event->accept()在这些函数的末尾:或调用基类函数,例如qgraphicscene::mousePressEvent(事件);