Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在QGraphicsView';海景_C++_Qt - Fatal编程技术网

C++ 在QGraphicsView';海景

C++ 在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();

我有这个:

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();
    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(事件);