Qt에서 UI를 개발하다 보면 윈도우 프레임을 없애야 할 경우가 있습니다. 그런데 윈도우 프레임을 제거하면 프로그램화면을 마우스로 이동할 수 없게됩니다.
이 때는 마우스 이벤트를 커스터마이즈하면 해결가능합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #ifndef WIDGET_H #define WIDGET_H #include <QWidget> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private: Ui::Widget *ui; int mouseX; //마우스 클릭 해제시 X좌표 int mouseY; //마우스 클릭 해제시 Y좌표 int absX; //마우스 클릭 직후 X좌표 int absY; //마우스 클릭 직후 Y좌표 int justOneCount; //마우스 클릭 직후 한번만 연산하기 위한 변수 void mouseMoveEvent(QMouseEvent *mouse); //마우스 이동 이벤트 void mouseReleaseEvent(QMouseEvent *); //마우스 클릭 해제 이벤트 }; #endif // WIDGET_H |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include "widget.h" #include "ui_widget.h" #include <QMouseEvent> Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); setWindowFlags(Qt::CustomizeWindowHint);//윈도우 프레임을 없애는 함수 resize(600,600);//위젯 리사이즈 justOneCount=0; //변수 초기화 mouseX=this->geometry().x(); //현재 마우스 좌표로 초기화 mouseY=this->geometry().y(); absY=this->geometry().y(); absX=this->geometry().x(); } Widget::~Widget() { delete ui; } void Widget::mouseMoveEvent(QMouseEvent *mouse) { if(this->isMaximized()==true) //최대화 되어있을경우 무시 return; if(mouse->button()==Qt::RightButton) //오른쪽클릭했을경우 무시 return; mouseX=QCursor::pos().x(); //마우스 절대좌표 mouseY=QCursor::pos().y(); if(justOneCount==0) { absX=mouse->pos().x()+7; //마우스 상대좌표 저장 +7은 미세조정 absY=mouse->pos().y()+7; justOneCount++; //1이되면 이 블록을 연산하지 않음 } this->move(mouseX-absX,mouseY-absY); //절대좌표에서 상대좌표를 빼서 이동하는 원리 } void Widget::mouseReleaseEvent(QMouseEvent *) { justOneCount=0; //마우스를 클릭 해제하면 다시 0으로하여 반복사용가능 } |
해당 예제는 첨부파일로 올려놨으니 필요하신 분들은 다운해서 사용하시면 됩니다
'컴퓨터 공학 > Qt' 카테고리의 다른 글
[ Qt 프로그래밍 ] Qt에서 XML 사용하기 예제 (0) | 2015.11.26 |
---|---|
[ Qt 프로그래밍 ][신간]Qt5 프로그래밍 가이드 (0) | 2015.11.26 |
[ Qt 프로그래밍 ] Visual Studio 2010에서 Qt5 실행하기 (0) | 2015.11.26 |
[ Qt 프로그래밍 ] virtualbox 우분투 해상도 안맞을때 (0) | 2015.11.26 |
[ Qt 프로그래밍 ] Qt를 안드로이드에 빌드하기 (0) | 2015.11.26 |