父级恢复时 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 出现太快的主要内容,如果未能解决你的问题,请参考以下文章