• 4534阅读
  • 2回复

[提问]怎么解决QComboBox下拉菜单和自定义窗口不同步的问题? [复制链接]

上一主题 下一主题
离线accordion123
 

只看楼主 倒序阅读 楼主  发表于: 2016-07-23


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

请问这样的问题如何解决?

离线6gongzi

只看该作者 1楼 发表于: 2016-07-25
点下拉键,焦点会在combo上,这种情况下,鼠标移动是不应该移动主窗口的
只有在下拉框出现以后,在能移动窗口
这是焦点切换的流程问题,你要考虑用户的使用情况
离线accordion123

只看该作者 2楼 发表于: 2016-07-25
回 6gongzi 的帖子
6gongzi:点下拉键,焦点会在combo上,这种情况下,鼠标移动是不应该移动主窗口的
只有在下拉框出现以后,在能移动窗口
这是焦点切换的流程问题,你要考虑用户的使用情况 (2016-07-25 08:34) 

所以怎么才能把让用户在点击combo的时候焦点一定是在combo上?
快速回复
限100 字节
 
上一个 下一个