2012-07-03 5 views
4

QTCreator를 사용 중이고 QWidget을 만든 후 setWindowFlags(Qt::CustomizeWindowHint);으로 제목 표시 줄을 숨 깁니다.화면에서 Qwidget 선택 및 이동

하지만 위젯을 선택하거나 이동할 수 없습니다. 어떻게 그것을 해결하기 위해 mouseEvent를 사용할 수 있습니까? , mousePressEvent에서

#include <QtGui> 

class W: public QWidget 
{ 
    Q_OBJECT 

    public: 
     explicit W(QWidget *parent=0) : QWidget(parent) { } 

    protected: 
     void mousePressEvent(QMouseEvent *evt) 
     { 
      oldPos = evt->globalPos(); 
     } 

     void mouseMoveEvent(QMouseEvent *evt) 
     { 
      const QPoint delta = evt->globalPos() - oldPos; 
      move(x()+delta.x(), y()+delta.y()); 
      oldPos = evt->globalPos(); 
     } 

    private: 
     QPoint oldPos; 
}; 

: 당신이 (마우스 버튼을 누른 유지하면서) 만 클릭하고 드래그하여 화면에 주위에 당신의 창을 이동 할 수있게하려면

답변

17

, 여기에 그것을 할 수있는 쉬운 방법 마우스가 있던 위치의 전역 (화면 좌표) 위치를 저장 한 다음 mouseMoveEvent에서 마우스가 얼마나 멀리 움직 였는지 계산하고 그 양만큼 위젯의 위치를 ​​업데이트합니다.

마우스 추적을 사용하도록 설정 한 경우 실제로 마우스 단추를 누를 때 창만 이동하는 논리를 추가해야합니다. (마우스 트래킹이 비활성화되어있는 경우, 기본값 인 mouseMoveEvent은 버튼을 누르고있을 때만 생성됩니다).

+0

고마워요! 효과가있다. –