我想使用QGraphicsLineItem繪製一條線。我想要的是,在點擊GraphicsView時,必須在第二次單擊Line之後繪製。我對QGraphicsLineItem的語法以及如何使用它感到困惑。我是Qt新手。請幫我解決這個問題。使用QGraphicsLineItem在當前位置繪製線
回答
可以導出圖形視圖/場景並重寫mousePressEvent
下面是例如使用衍生QGraphicsScene和重寫mousePressEvent
類定義:
class MyScene : public QGraphicsScene
數據成員:
QList<QPointF> m_clickPositions;
int m_mode;
編號:
void MyScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
if(false == sceneRect().contains(event->scenePos()))
{
QGraphicsScene::mousePressEvent(event);
}
else if(Qt::LeftButton == event->button() && m_mode == ConstructMode)
{
m_clickPositions.append(event->scenePos());
if(m_clickPositions.size() == 2)
{
QLineF lineF(m_clickPositions[0], m_clickPositions[1]);
QGraphicsLineItem* item = this->addLine(lineF);
m_clickPositions.clear();
m_mode = ScrollMode;
}
}
}
我在項目中使用了類似的東西,並提取了代碼。希望這可以幫助。
請評論這是行不通的。
編輯::
ConstructMode和滾動模式用於上述程序,以便我可以區分是否要繪製/構造或只是滾動場景。如果你不需要,你可以刪除它們和m_mode的聲明。
如果你想使用模式,你可以定義一些公共常量並添加一個方法setMode()。請參閱下面的代碼。
MyScene.h或者如果你有一個
#define ConstructMode 100
#define ScrollMode 101
,並添加以下功能
void MyScene::setMode(int mode)
{
m_mode = mode;
}
在此之後,如果你想進入施工模式下,你將需要調用myScene一些常量文件 - > setMode(ConstructMode),因爲在項目構建之後,模式被重置爲ScrollMode。
我用這個代碼,但得到如下:1)錯誤:'ConstructMode'未在此範圍內聲明 2)錯誤:'ScrollMode'未在此範圍內聲明 – user3859872 2014-09-02 17:46:41
請幫助我。我沒有得到在何處以及如何聲明構造模式和Scrollmode – user3859872 2014-09-02 18:34:08
ScrollMode和ConstructMode被我用來區分我是處於構造/繪製模式還是僅僅想滾動場景。如果你不需要它們,你可以刪除它們。 (也刪除m_mode聲明)。 – Pratham 2014-09-03 06:14:07
您可以使用此代碼段。
* H
#ifndef GRAPHICSSCENE_H
#define GRAPHICSSCENE_H
#include <QGraphicsScene>
#include <QStack>
#include <QPoint>
#include <QMouseEvent>
class GraphicsScene : public QGraphicsScene
{
Q_OBJECT
public:
explicit GraphicsScene(QObject *parent = 0);
signals:
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent);
public slots:
private:
QStack<QPoint> stack;
};
#endif // GRAPHICSSCENE_H
*的.cpp
#include "graphicsscene.h"
#include <QDebug>
#include <QGraphicsSceneMouseEvent>
GraphicsScene::GraphicsScene(QObject *parent) :
QGraphicsScene(parent)
{
}
void GraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
qDebug() << "in";
if (mouseEvent->button() == Qt::LeftButton)
{
QPoint pos = mouseEvent->scenePos().toPoint();
if(stack.isEmpty())
stack.append(pos);
else if(stack.count() == 1)
{
stack.append(pos);
addLine(QLine(stack.pop(),stack.pop()),QPen(Qt::green));
}
}
}
用法:
GraphicsScene *scene = new GraphicsScene(this);
ui->graphicsView->setScene(scene);
ui->graphicsView->show();
編輯:更漂亮的解決方案,因爲你需要它的工作原理。
void GraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
qDebug() << "in";
if (mouseEvent->button() == Qt::LeftButton)
{
QPoint pos = mouseEvent->scenePos().toPoint();
if(stack.isEmpty())
stack.append(pos);
else
addLine(QLine(pos,stack.pop()),QPen(Qt::green));
}
}
- 1. osmdroid繪製當前位置離線
- 2. 使用GPS提供商在地圖上使用當前位置繪製路線
- 3. 使用基於當前位置的MapKit在地圖上繪製路線
- 4. 在android中當前位置到另一個位置之間繪製路線?
- 5. 如何使用MyLocationOverlay在MapView上繪製當前GPS位置?
- 6. 如何繪製當前位置和另一個位置之間的路線
- 7. drawPolygon不斷繪製從開始(mousePressed)位置到當前(mouseDragged)位置的線條
- 8. Gmaps - 當前位置移動多線制
- 9. Android GPS繪圖儀從當前位置繪製線條直到停止移動
- 10. 在異步任務onPostExecution後在當前位置繪製標記
- 11. 通過GPS獲取當前位置在地圖上繪製路線? iPhone(iOS6)
- 12. 當在相同的位置繪製球體和線條時,它們被繪製在不同的位置
- 13. 如何在Google Maps圖像中繪製當前位置
- 14. 谷歌地圖當前位置繪圖
- 15. 如何繪製從當前位置到目的地的路線方向
- 16. 如何在我的當前位置與MKMapView上的所需位置之間繪製路線?
- 17. 如何在地圖視圖中繪製從當前位置到目的位置的路線xamarin iOS
- 18. 在cuncerent位置和鎖定位置之間繪製折線
- 19. Skobbler iOS SDK在當前位置使用什麼位置設置?
- 20. vis.js當前時間線:如何在vis.js中繪製線條
- 21. 獲取當前位置和繪製路徑的谷歌地圖
- 22. setImageDrawable未設置當前可繪製的
- 23. 如何分配當前地理座標以繪製從當前位置到目標位置的路徑?
- 24. 當前位置
- 25. 使用谷歌API從我的位置到目的地位置繪製路線
- 26. 我使用此代碼來查看用戶當前位置。當前位置
- 27. 在iOS應用中繪製用戶當前位置到目的地之間的路線方向?
- 28. 如何在iOS/Swift中根據當前位置給出方位/標題值來繪製線條?
- 29. 圖中使用當前節點放置可以繪製networkx嗎?
- 30. 使用CEF,bing地圖在顯示路線之前先顯示當前位置
請顯示您的密碼。確保它很短 - 將它們放到一個main.cpp文件中。 – 2014-09-02 13:03:42