2015-11-10 62 views
0

我在QLabel上有一個橡皮筋。我想用鼠標拖動和調整橡皮筋的大小。任何人都可以請幫忙嗎?如何在Qlabel上使用鼠標拖動和調整橡皮筋?

下面是我的代碼:

void Widget::mousePressEvent(QMouseEvent *event) 
{ 
    if(mRubberBand->geometry().contains(event->pos())) 
    { 
     rubberband_offset = event->pos() - mRubberBand->pos(); 
     move_rubberband = true; 
    } 
else 
    { 
     Origin= event->pos(); 
    //qDebug()<<Origin; 

    // Move the rubber band to the new position 
    // and set its size to 0x0 
     mRubberBand->setGeometry(QRect(Origin, QSize())); 
     // Display the rubber band 
     mRubberBand->show(); 
    } 
    } 
} 

    void Widget::mouseMoveEvent(QMouseEvent *event) 
{ 
// esize the rubber band rectangle 
if(move_rubberband) 
{ 
    mRubberBand->move(event->pos() - rubberband_offset); 
} 
else 
{ 
mRubberBand->setGeometry(QRect(Origin, event->pos()).normalized()); 
// Display the size of the rectangle 
QToolTip::showText(event->globalPos(), QString("%1,%2") 
              .arg(mRubberBand->size().width()) 
              .arg(mRubberBand->size().height()),this); 
//qDebug()<<Origin<<" "<<mRubberBand->size().width()<<","<<mRubberBand->size().height(); 
//qDebug()<<Origin.x()<<Origin.y(); 
} 

} 

void Widget::mouseReleaseEvent(QMouseEvent *event) 
{ 
    EndPoint = event->pos(); 
} 

回答

0

並不是一個真正的答案,但有意見沒有足夠的信用。

你的代碼有點壞。你在哪裏設置move_rubberbandfalse

所以mRubberBand->setGeometry(QRect(Origin, event->pos()).normalized());永遠不會到達。

Ich猜你在做不粘貼的releaseEvent?

+0

我設置move_rubberband爲false在主要功能。所以這對我來說不是一個問題.... –

+0

我看不出你如何確定它設置爲false。它在pressEvent中被設置爲true,並且會在releaseEvent中被重新設置? – Aaron

+0

此外,它會很有趣,什麼工作如你所料,什麼不工作。您是否嘗試傳播一些qDebug()調用,以便在整個拖放操作過程中實際執行代碼? – Aaron