自制标题栏的拖放(Qt)


之前不知道因为什么原因.在自己实现的标题栏上面实现拖动的时候总是会有一定的显示延迟,表现出来就是当鼠标快速拖动的时候,整个界面还没有移动到那个位置,就导致鼠标直接移出了整个窗口,也就不再响应鼠标的事件了= =囧.

之后也没有怎么仔细的研究.但是昨天看了论坛上一个简单的note的代码之后发现了问题…我在重新实现鼠标动作的三个函数的时候写的代码重复了,代码本身也存在一定的偏差,执行效率不高= =后来根据那个demo改变了部分代码(删除了大部分代码= =)之后就非常好使了~

简单的代码列在下面:

[cpp title=“dialog.h”]

class Dialog : public QDialog { protected: //自己重新实现拖动操作 void mouseMoveEvent ( QMouseEvent * event ); void mousePressEvent ( QMouseEvent * event ); void mouseReleaseEvent(QMouseEvent *); private: QPoint mousePosition; bool isMousePressed; }

[/cpp]

实现代码:(真的很简单)

[cpp]

//标题栏的长度 const static int pos_min_x = 0; const static int pos_max_x = 800-40; const static int pos_min_y = 0; const static int pos_max_y = 20;

//自己实现的窗口拖动操作 void Dialog::mousePressEvent(QMouseEvent *event) { mousePosition = event->;pos(); //只对标题栏范围内的鼠标事件进行处理 if (mousePosition.x()<=pos_min_x) return; if ( mousePosition.x()>;=pos_max_x) return; if (mousePosition.y()<=pos_min_y ) return; if (mousePosition.y()>;=pos_max_y) return; isMousePressed = true; }

void Dialog::mouseMoveEvent(QMouseEvent *event) { if ( isMousePressed==true ) { QPoint movePot = event->;globalPos() - mousePosition; move(movePot); } }

void Dialog::mouseReleaseEvent(QMouseEvent *event) { isMousePressed=false; }

[/cpp]

comments powered by Disqus