
比如上图,我自定义了一个
窗口,把
标题栏和边框全部取消了,然后我重写了mousePressEvent和mouseMoveEvent
- void LogInDialog::mousePressEvent(QMouseEvent *event)
- {
- if(event->button() == Qt::LeftButton)
- {
- dragPosition = event->globalPos() - frameGeometry().topLeft();
- event->accept();
- }
- }
- void LogInDialog::mouseMoveEvent(QMouseEvent *event)
- {
- if(event->buttons() & Qt::LeftButton && event->button() == Qt::NoButton)
- {
- move(event->globalPos()- dragPosition);
- event->accept();
- }
- }
结果我发现了像图里一样的状况,具体重现BUG的方法是点下拉键,然后迅速甩鼠标到某个地方,然后窗口动了,下拉菜单才出来,搞了好久都不知道怎么弄
1. 我尝试用
event->globalPos() - frameGeometry().topLeft()把中间部分的区域范围算出来,然后如果在区域点击,则mousePressEvent记录下来,然后在move里面做判断,结果我
调试的时候发现只要我动作大一点还是会出现
问题,而且我发现我点了下拉菜单以后程序压根不进Pressed,而是直接进的Move
2. 然后我给highlighted()做个槽,让他出现下拉动作的时候立马设标志,然后move不调用,还是不行,应该是槽的调用时随机的问题。。。
请问这样的问题如何解决?