【发布时间】:2023-03-28 17:13:01
【问题描述】:
我有以下问题:我的应用程序附带了一个类似“飞溅”的窗口,上面有几个按钮用于打开最后一个项目、创建一个新项目等...按下时,这些按钮会隐藏窗口和做的东西。
这个窗口是用以下代码和标志创建的:
void MainWindowButtonDialog::showMe()
{
setModal(false);
setWindowFlags(Qt::SplashScreen | Qt::CustomizeWindowHint |
Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint);
show();
}
该窗口名为m_btnDlg。
现在,由于应用程序失去焦点时来自客户端的请求,我需要隐藏此窗口,而当应用程序获得焦点时,我需要重新显示它。这是通过以下代码完成的:
void MainWindow::changeEvent(QEvent *e)
{
if( e->type() == QEvent::WindowStateChange )
{
if( isMinimized() )
{
if(m_btndlg && m_btndlg->isVisible())
{
m_btndlg->hide();
m_splashWasVisible = true;
}
}
else
{
if(m_splashWasVisible)
{
m_btndlg->show();
m_splashWasVisible = false;
}
}
}
if(e->type() == QEvent::ActivationChange)
{
if(!isActiveWindow())
{
if(m_btndlg && m_btndlg->isVisible() && !m_btndlg->isActiveWindow())
{
m_btndlg->hide(); // *****
m_splashWasVisible = true;
}
}
else
{
if(m_splashWasVisible)
{
m_btndlg->show();
m_splashWasVisible = false;
}
}
}
QMainWindow::changeEvent(e);
}
现在问题来了:上面的代码到目前为止都运行良好(在 Linux 下 - CentOS 5.x 上的 Gnome 2.x 和 KDE 3.x 以及 Windows,所有有趣的版本)。最近客户端安装了一些 Fedora 系统和 Gnome 3、KDE 4 等......突然应用程序的行为很有趣。当我按下按钮创建一个新项目时,它隐藏了启动窗口并且没有任何反应。上面标有 ** 的行是负责人。这些新窗口管理器似乎乱序发送激活事件。
有人有这方面的经验吗?
(可根据要求提供更多代码)。我们使用 Qt 4.6.3 谢谢。
【问题讨论】:
标签: qt event-handling window activation