父级恢复时 Qt::Tool 出现太快

Posted

技术标签:

【中文标题】父级恢复时 Qt::Tool 出现太快【英文标题】:Qt::Tool appear too fast when parent restored 【发布时间】:2012-06-04 23:00:05 【问题描述】:

我有一个 qt 应用程序,带有几个子窗口小部件的窗口是 Qt::Tool 窗口。

当我最小化窗口然后在 windows 7 上恢复时,子窗口小部件立即出现,但父窗口不是因为动画。

有什么办法可以防止这种行为,让子窗口出现在主窗口之后?

【问题讨论】:

此行为取决于窗口管理器。最好不要尝试改变它。为什么短暂的延迟真的很重要? 因为恢复过程看起来很难看,我希望应用程序表现得尽可能好。 【参考方案1】:

为什么不在主窗口恢复时隐藏工具窗口?您可以使用这段代码并根据您的需要进行调整:

void MainWindow::changeEvent( QEvent* e )

  if ( e->type() == QEvent::WindowStateChange )
  
    QWindowStateChangeEvent* event = 
        static_cast< QWindowStateChangeEvent* >( e );
    if ( event->oldState() & Qt::WindowMinimized ) 
      qDebug() << "The Window has been restored!";
    
    else if ( (event->oldState() == Qt::WindowNoState) && 
              (this->windowState() == Qt::WindowMaximized) ) 
      qDebug() << "the window has been Maximized!";
    
  

例如,您可以启动一个计时器一段时间,并将插槽连接到您的子工具窗口,让它们按您的意愿显示。

您还可以在子工具窗口中使用透明度,并模拟主窗口效果。

我记得,这样的事情会做:

setStyleSheet("background:transparent;");
setAttribute(Qt::WA_TranslucentBackground);
setWindowFlags(Qt::FramelessWindowHint);

希望有所帮助!

【讨论】:

定时器和自定义透明度是解决这个问题的最后手段,我什至更喜欢一些 winapi 消息来捕捉这个问题,因为这样可以更好地和更容易地与跨平台代码隔离。 我已经解决了它使用延迟显示小部件,似乎这真的是唯一的选择。

以上是关于父级恢复时 Qt::Tool 出现太快的主要内容,如果未能解决你的问题,请参考以下文章

父级暂停和子级恢复后雪花子任务未运行

即使没有悬停在父级上,子元素也会出现

div盒子存在阴影导致父级标签出现滚动条

出现弹窗后,父级页面还能进行滑动或滚动的问题

width:100%与绝对定位同时存在,偏移出父级容器

防止浏览器在重新加载父级时保留 iframe url