2011-10-14 18 views
17

में माउस को ट्रैक करना I QClraphicsScene को उप-वर्गीकृत किया गया और माउस मूव इवेंट को संभालने के लिए विधि माउसमोवेंवेंट जोड़ा गया। मैंने ग्राफिक्स व्यू के शीर्ष पर एक शासक बनाया और शासक को माउस आंदोलन पर नज़र रखता है। QGraphicsScene :: mousemoveEvent में मैं शासक विजेट के mouseMoveEvent को अनजाने में कॉल करता हूं। इसका उद्देश्य शासक को वर्तमान माउस स्थिति जानता है।QGraphicsScene क्लास

अब ऐसा लगता है कि QGraphicsScene :: mousemoveEvent को माउस को स्थानांतरित करने के दौरान नहीं कहा जाता है। हालांकि, अगर मैं बाएं माउस बटन दबाता हूं और बटन दबाते समय इसे स्थानांतरित करता हूं तो मैं इसे काम पर ला सकता हूं। यह वह नहीं है जिसे मैं देखना चाहता हूं; जब भी मैं माउस को दृश्य पर रखता हूं और माउस को ले जाता हूं, तो मुझे यह विधि पसंद है।

क्या कोई कामकाज है?

+4

ठीक है, मैं यह पता लगाना । मुझे QGraphicsView में माउसट्रैकिंग सक्षम करने की आवश्यकता है। ऐसा करने के बाद यह एक आकर्षण की तरह काम करता है। – cuteCAT

+4

तो उत्तर दें और उत्तर दें – Dmitriy

+0

@ शेरवुडहु जैसे भूगर्भों ने कहा, आपको अपने प्रश्न का उत्तर देना चाहिए और इसे स्वीकार करना चाहिए। यह यहां एक पूरी तरह से वैध अभ्यास है। –

उत्तर

9

रूप QGraphicsView दस्तावेज में कहा गया है, दृश्य दृश्य घटनाओं में माउस और कीबोर्ड की घटनाओं से अनुवाद करने और दृश्य के लिए प्रचार है कि के लिए जिम्मेदार है:

आप माउस का उपयोग करके दृश्य पर आइटम के साथ बातचीत कर सकते हैं और कीबोर्ड। QGraphicsView दृश्य घटनाओं में माउस और प्रमुख घटनाओं का अनुवाद करता है, (QGraphicsSceneEvent प्राप्त करने वाली घटनाएं), और उन्हें दृश्य दृश्य में अग्रेषित करें।

mouse move events के बाद से ही जब एक बटन डिफ़ॉल्ट रूप से दबाया जाता है, तो आप, इस कदम की घटनाओं पहली जगह में उत्पन्न करने के लिए दृश्य पर setMouseTracking(true) करने की जरूरत है ताकि यह दृश्य करने के लिए उन अग्रेषित कर सकते हैं पाए जाते हैं।
वैकल्पिक रूप से, यदि आपको दृश्य निर्देशांक के अनुवाद की आवश्यकता नहीं है, तो आप अपने दृश्य के बजाय सीधे दृश्य में mouseMoveEvent को पुन: कार्यान्वित कर सकते हैं। लेकिन इस मामले में, सुनिश्चित करें कि आप अपने कार्यान्वयन में बेस क्लास QGraphicsView::mouseMoveEvent पर कॉल करें, ताकि आपके दृश्य में आइटम्स के लिए होवर ईवेंट ठीक से जेनरेट किए जाएं।

2

मैं पूछ कर दिया गया है, और कुछ जगह में कुछ उपयोगी जानकारी मिल गई, और परीक्षण यह लिख:

tgs.cpp:

#include <QtGui> 
#include "tgs.h" 
#define _alto 300 
#define _ancho 700 
#include <QGraphicsSceneMouseEvent> 

TGs::TGs(QObject *parent) 
    :QGraphicsScene(parent) 
{ // Constructor of Scene 
    this->over = false; 
} 

void TGs::drawBackground(QPainter *painter, const QRectF &rect) 
{ 

#define adjy 30 
#define adjx 30 

    int j = 0; 
    int alto = 0; 

    QPen pen; 
    pen.setWidth(1); 
    pen.setBrush(Qt::lightGray); 
    painter->setPen(pen); 

    painter->drawText(-225, 10, this->str); 
    alto = _alto; // 50 + 2 

    for(int i = 0; i < alto; ++i) 
    { 
     j = i * adjy - 17; 

     painter->drawLine(QPoint(-210, j), QPoint(_ancho, j)); 
    } 

    for(int i = 0; i < 300; ++i) 
    { 
     j = i * adjx - 210; 

     painter->drawLine(QPoint(j, 0), QPoint(j, _ancho * 2)); 
    } 
} 

void TGs::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) 
{ 
    QString string = QString("%1, %2") 
       .arg(mouseEvent->scenePos().x()) 
       .arg(mouseEvent->scenePos().y()); // Update the cursor position text 
    this->str = string; 
    this->update(); 
} 

void TGs::mousePressEvent(QGraphicsSceneMouseEvent *event) 
{ 
    this->update(); 
} 

void TGs::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) 
{ 
    this->update(); 
} 

tgs.h:

#ifndef TGS_H 
#define TGS_H 

#include <QObject> 
#include <QGraphicsView> 
#include <QGraphicsScene> 
#include <QGraphicsTextItem> 

QT_BEGIN_NAMESPACE 

class QGraphicsSceneMouseEvent; 
class QMenu; 
class QPointF; 
class QGraphicsLineItem; 
class QFont; 
class QGraphicsTextItem; 
class QColor; 

QT_END_NAMESPACE 

class TGs : public QGraphicsScene 
{ 
public: 
    TGs(QObject *parent = 0); 

public slots: 
    void drawBackground(QPainter *painter, const QRectF &rect); 
    void mouseMoveEvent(QGraphicsSceneMouseEvent * mouseEvent); 
    void mousePressEvent(QGraphicsSceneMouseEvent *event); 
    void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); 

    bool over; 
    QString str; 
    QGraphicsTextItem cursor; 
}; 

#endif // TGS_H