我想允許用戶使用鼠標在圖像上繪製線條, 我正在使用圖形視圖和鼠標事件,但我得到的位置不是正確的位置相對到圖像 這裏是鼠標事件函數qt在圖形視圖中獲取鼠標相對於圖像的位置
void InitializationDialog::mousePressEvent(QMouseEvent *event) {
if(drawing) {
points.append(event->pos());
if(!points.isEmpty()) {
if(points.size()==1) {
QString fileName = list.at(choosed);
QImage image(fileName);
QGraphicsScene* scene = new QGraphicsScene();
QGraphicsPixmapItem* item = new QGraphicsPixmapItem(QPixmap::fromImage(image));
scene->addItem(item);
QColor color(255,0,0);
QBrush brush(color);
QPen pen(brush, 4);
QGraphicsLineItem* line = new QGraphicsLineItem(points.at(0).x(),points.at(0).y(),points.at(0).x()+1,points.at(0).y()+1);
line->setPen(pen);
scene->addItem(line);
ui->graphicsView->setScene(scene);
return;
}
}
}
}
這應該畫一個點(我與一個像素長線替換它看起來像一個點)
我怎樣才能確切地在鼠標光標上?
編輯:
我做了一個自定義類圖形場景相對點擊得到它,我試圖重寫鼠標按下圖像查看,但現場的尺寸與圖形視圖和點一樣還是遠鼠標點擊
覆蓋鼠標在我的自定義場景按下並沒有太大的幫助,因爲我總是得到0,0位置點擊場景無論在哪裏我點擊
新文件代碼:
報頭F ILE
#ifndef INITGRAPH_H
#define INITGRAPH_H
#include <QtGui>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QPoint>
#include <QGraphicsSceneMouseEvent>
class InitGraph : public QGraphicsView {
Q_OBJECT
public:
InitGraph(QWidget *parent = 0);
virtual ~InitGraph() {};
};
class CustomScene : public QGraphicsScene {
Q_OBJECT
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
signals:
void pressed(QPoint p);
};
#endif // INITGRAPH_H
源文件
#include "initgraph.h"
InitGraph::InitGraph(QWidget *parent):QGraphicsView(parent)
{
}
void CustomScene::mousePressEvent(QGraphicsSceneMouseEvent *event){
qDebug(QString::number(event->pos().rx()).toLatin1());
QPoint p = event->pos().toPoint();
emit pressed(p);
}
首先,我會建議處理QGraphicsScene的'mousePressEvent'(http://doc.qt.io/qt-5/qgraphicsscene.html#mousePressEvent)...第二,我想知道爲什麼你在每個'mousePress'上創建一個新場景,pixmap和line-item? – Robert
這是不好的做法,你是對的,我很急,所以沒有注意到,我會考慮讓他們一次,並刪除他們在析構,謝謝你提醒我 –
我也將檢查鏈接,讓我知道如果我有任何問題 –