基於Qt QGraphicsView的多點觸摸繪圖

本應用於基於QGraphicsView框架,實現多點觸摸. 工程僅僅演示了多點觸摸繪圖,源自我前段時間一款基於Qt的繪圖軟件.框架

工程結構:ide


kmp.h 定義了枚舉工具

slide.h/cpp 定義了派生於QGraphicsScene的slide類,實現繪製的主要功能this

widget.h/cpp 定義了派生於QGraphicsView的widget類,多點了多點觸摸部分.spa

kmpinkelement.h/cpp 定義了派生於QGraphicsPathItem的筆跡對象.code

 

應用實現了抒寫,沒有實現相似其餘工具:橡皮擦,選擇工具,漫遊工具等對象

QGraphicsView的多點觸摸在viewportEvent事件,處理TouchBegin/touchUpdate/TouchEnd事件,在處理touch事件中須要經過判斷每一個點的狀態,同時根據每一個點的ID來實現多點筆跡的管理.blog

bool Widget::viewportEvent(QEvent *event){
    // 處理touch事件
    QEvent::Type evType = event->type();
    if(evType==QEvent::TouchBegin || evType == QEvent::TouchUpdate || evType == QEvent::TouchEnd )
    {
        QTouchEvent* touchEvent = static_cast<QTouchEvent*>(event);
        QList<QTouchEvent::TouchPoint> touchPoints = touchEvent->touchPoints();

        foreach( const QTouchEvent::TouchPoint tp , touchPoints ){
            //不考慮pad
            QPoint touchPos  = QPoint( tp.pos().x() , tp.pos().y() );
            if(tp.id() == 0 ){
                if( tp.state() == Qt::TouchPointPressed )
                    this->_isTouchMode = true;
                else
                    this->_isTouchMode = false;
            }

            QPointF scenepos = this->mapToScene(touchPos.x() , touchPos.y() );
            switch( tp.state() ){
            case Qt::TouchPointPressed:
                this->_currentSlide->onDeviceDown(scenepos, tp.id());
                break;
            case Qt::TouchPointMoved:
                this->_currentSlide->onDeviceMove(scenepos,tp.id());
                break;
            case Qt::TouchPointReleased:
                this->_currentSlide->onDeviceUp(tp.id());
                break;
            }

        }

        if(evType == QEvent::TouchEnd ){
            // to do
        }

        return true;
    }

    return QGraphicsView::viewportEvent(event);
}

 

書寫咱們是基於QGraphiscLineItem的,書寫結束後咱們才生成KMPInkElement,因此在slide類中咱們看到咱們有一個std::vector集合來存儲繪製過程當中添加產生的QGraphicsLineItem對象,在最後結束繪製後須要畫板上移除集合中全部對象。事件

 

具體能夠查看源碼,沒有太多複雜的東西element

開發環境: QT5.5 ,  QtCreator , win7

 

源碼

相關文章
相關標籤/搜索