• 1824阅读
  • 1回复

[提问]QT最大化恢复后控件大小改变了 [复制链接]

上一主题 下一主题
离线suzhuorui
 

只看楼主 倒序阅读 楼主  发表于: 2020-08-18
关键词: 紧急求助界面
自定义了一个标题栏,存在(最大化(恢复正常),最小化,关闭)等按钮
界面中存在一系列布局,其中包括一个QGroupBox,这个QGroupBox中是水平布局,存在两个QLabel,一个用来显示摄像头,一个用来显示信息。
界面事件处理用的事件过滤器eventFilter,对标题栏中的按钮进行事件重写(最大化,最小化,恢复,关闭)
最近遇到这么一个问题,运行程序后,点击最大化按钮后使窗体最大化,再次点击使窗体恢复原来大小,但是其中用来显示摄像头的QLabel大小变了,不是正常界面中的大小。还有就是,在事件过滤器eventFilter中实现了双击摄像头QLabel会使他全屏显示,再次双击恢复原来大小,这个功能也有问题,跟上面的问题一样,都是放大恢复后不是原始大小。我觉得两个问题可能是一个原因导致的,大佬们帮我看看是怎么回事呀。
  1. bool MainWindow::eventFilter(QObject *o, QEvent *e)
  2. {
  3.     QMouseEvent* ev=static_cast<QMouseEvent *>(e);
  4.     if(e->type()==QEvent::MouseMove)//鼠标移动
  5.     {
  6.         if(!isMax)
  7.         {
  8.             //只要鼠标移动就更改鼠标样式,并检测鼠标是否在边框上
  9.             setMouseStyle(getMouseArea(ev->pos()));
  10.             //判断是否按下标题移动
  11.             if(mousePressed)
  12.             {
  13.                 QWidget* pw=this->childAt(pressedPoint);
  14.                 if(pw==ui->my_title||pw==ui->ico)
  15.                 {
  16.                     move(this->pos()+ev->globalPos()-pressedPoint2);
  17.                     pressedPoint2=ev->globalPos();
  18.                 }
  19.             }
  20.             if(ischange)
  21.             {
  22.                 changeWidgetSize(ev->globalPos());
  23.             }
  24.         }
  25.     }
  26.     else if((o==ui->centralWidget)&&(e->type()==QEvent::MouseButtonPress))//边框鼠标按下
  27.     {
  28.         if(curEvent!=NON)//如果在边框上并且按下左键
  29.         {
  30.             ischange=true;
  31.             m_StartGeometry=this->geometry();
  32.         }
  33.     }
  34.     else if(e->type()==QEvent::MouseButtonRelease)//鼠标抬起
  35.     {
  36.         mousePressed = false;
  37.         ischange=false;
  38.         curEvent=NON;
  39.     }
  40.     else if((o==ui->my_title)&&e->type()==QEvent::MouseButtonDblClick)//双击标题栏
  41.     {
  42.         if(!isMax)
  43.         {
  44.             isMax=true;
  45.             this->showMaximized();
  46.         }
  47.         else {
  48.             isMax=false;
  49.             this->showNormal();
  50.         }
  51.     }
  52.     else if((o==ui->my_title||o==ui->ico)&&e->type()==QEvent::MouseButtonPress)//标题按下
  53.     {
  54.         if(ev->button()==Qt::LeftButton)
  55.         {
  56.             mousePressed = true;
  57.             pressedPoint = ev->pos();//相对于窗体中鼠标的位置
  58.             pressedPoint2= ev->globalPos();//相对于桌面中鼠标的位置
  59.         }
  60.     }
  61.     else if((o==ui->wenduchartview)&&(e->type()==QEvent::MouseButtonDblClick))//双击温度湿度图
  62.     {
  63.         if(ui->wenduchartview->isFullScreen())
  64.         {
  65.             ui->wenduchartview->setWindowFlags(Qt::SubWindow);
  66.             ui->wenduchartview->showNormal();
  67.         }
  68.         else {
  69.             ui->wenduchartview->setWindowFlags(Qt::Dialog);
  70.             ui->wenduchartview->showFullScreen();
  71.         }
  72.     }
  73.     else if((o==ui->shiduchartview)&&(e->type()==QEvent::MouseButtonDblClick))//双击湿度湿度图
  74.     {
  75.         if(ui->shiduchartview->isFullScreen())
  76.         {
  77.             ui->shiduchartview->setWindowFlags(Qt::SubWindow);
  78.             ui->shiduchartview->showNormal();
  79.         }
  80.         else {
  81.             ui->shiduchartview->setWindowFlags(Qt::Dialog);
  82.             ui->shiduchartview->showFullScreen();
  83.         }
  84.     }
  85.     else if((o==ui->m_camera)&&(e->type()==QEvent::MouseButtonDblClick))//双击摄像头
  86.     {
  87.         if(ui->m_camera->isFullScreen())
  88.         {
  89.             ui->m_camera->setWindowFlags(Qt::SubWindow);
  90.             ui->m_camera->showNormal();
  91.             ui->m_camera->resize(camera_size);
  92.             int with = ui->m_camera->width();
  93.             int height = ui->m_camera->height();
  94.             qDebug()<<"缩小后的宽="<<with<<"缩小后的高="<<height;
  95.         }
  96.         else {
  97.             camera_size=ui->m_camera->size();
  98.             camera_rect=ui->m_camera->geometry();
  99.             ui->m_camera->setWindowFlags(Qt::Dialog);
  100.             ui->m_camera->showFullScreen();
  101.         }
  102.     }
  103.     else if((o==ui->wenduchartview)&&(e->type()==QEvent::Enter))//鼠标进入弹出提示框
  104.     {
  105.         ui->wenduchartview->setToolTip("双击最大/最小化");
  106.     }
  107.     else if((o==ui->shiduchartview)&&(e->type()==QEvent::Enter))//鼠标进入弹出提示框
  108.     {
  109.         ui->shiduchartview->setToolTip("双击最大/最小化");
  110.     }
  111.     else if((o==ui->m_camera)&&(e->type()==QEvent::Enter))//鼠标进入弹出提示框
  112.     {
  113.         ui->m_camera->setToolTip("双击最大/最小化");
  114.     }
  115.     return QWidget::eventFilter(o, e);
  116. }

  1. //最小化
  2. void MainWindow::chickMin()
  3. {
  4.     this->showMinimized();
  5. }
  6. //最大化
  7. void MainWindow::chickMax()
  8. {
  9.     if(!isMax)//不是最大化,最大化
  10.     {
  11.         isMax=true;
  12.         this->showMaximized();
  13.     }
  14.     else {
  15.         isMax=false;
  16.         this->showNormal();
  17.     }
  18. }
  19. //关闭
  20. void MainWindow::chickClose()
  21. {
  22.     qDebug()<<"点击关闭";
  23.     this->close();
  24. }


离线suzhuorui

只看该作者 1楼 发表于: 2020-08-18
大佬们帮我看看呀
快速回复
限100 字节
 
上一个 下一个