zoukankan      html  css  js  c++  java
  • Qt将窗体变为顶层窗体(activateWindow(); 和 raise() )

       我们知道,在windows上通过鼠标双击某应用程序图标,该应用程序往往会以顶层窗口的形式呈现在我们面前,但是对于一个已经打开的非顶层窗口,我们怎么将其激活为顶层窗口呢?

            要达到激活,这个必须要满足两个条件,第一,必须要有通知激活的人,这个人必须是另一个应用程序(或同一应用程序的不同示例),他能发送信息给该窗体;第二,该窗体能够解析出该消息。至于一个应用程序如何向另一个应用程序发送消息的方法有很多,如共享内存,网络的方式等等。这里就不做详述,好,闲话少说,我们进入正题,有了前面的两个条件,假设现在该窗体所在的应用程序解析到了另一个应用程序的通知激活消息,那麽该窗体怎么将其激活为桌面的顶层窗体呢?

    [cpp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. void CWidget::activateWindow()  
    2. {  
    3.     Qt::WindowStates winStatus = Qt::WindowNoState;  
    4.     if (windowState() & Qt::WindowMaximized)  
    5.     {  
    6.         winStatus = Qt::WindowMaximized;  
    7.     }  
    8.     setWindowState(Qt::WindowMinimized);  
    9.     setWindowState(Qt::WindowActive | winStatus);  
    10.     setGeometry(curGemRect);  
    11.     activateWindow();  
    12.     raise();  
    13. }  

    通过在窗体处理函数中调用上述函数,就可以将该窗体设为顶层窗体,其中,CWidget派生自QWidget(当然其他窗体也行,只要窗体的最终父类是QWidget就行),curGemRect是CWidget的成员变量,用来保存窗体的几何位置,这样就能记住窗体上一次弹出的位置,不过还要重载两个函数,resizeEvent和moveEvent,以保证窗体大小和位置改变后能时刻记住其位置。

    [cpp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. voidCWidget::resizeEvent(QResizeEvent*event)  
    2. {  
    3.     curGemRect = geometry();  
    4. }  
    5.   
    6. void CWidget::moveEvent(QMoveEvent *event)  
    7. {  
    8.     curGemRect = geometry();  
    9. }   
    
    
    http://blog.csdn.net/rabinsong/article/details/8660783
  • 相关阅读:
    后期生成事件命令copy /y
    SevenZipShaper压缩类
    vs2017
    WCF路由服务
    微服务--
    各种流程图的绘画网路工具 processon
    ROC 准确率,召回率 F-measure理解(转载)
    Unix OpenCV安装
    转载:tar 解压缩命令~
    cppreference经验总结
  • 原文地址:https://www.cnblogs.com/findumars/p/5599447.html
Copyright © 2011-2022 走看看