У меня есть следующая проблема: у меня есть приложение, похожее на «всплеск», которое идет с моим приложением, и на нем есть несколько кнопок для открытия последнего проекта, создания нового и т. Д. ... При нажатии эти кнопки скрываютсяокно и делать вещи.
Это окно создается со следующим кодом и флагами:
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 - Gnome 2.x на CentOS 5.x, так и KDE 3.x итакже винда, все интересные версии).Недавно клиент установил несколько систем Fedora и Gnome 3, KDE 4 и т. Д. ... внезапно приложение ведет себя странно.Когда я нажимаю кнопку, чтобы создать новый проект, он скрывает окно-заставку, и ничего не происходит.Ответственна строка, помеченная ** выше.Кажется, что эти новые оконные менеджеры отправляют события активации не по порядку.
Кто-нибудь сталкивался с этим?
(дополнительные коды доступны по запросу).Мы используем Qt 4.6.3 спасибо.