Mam dość nietypowy problem, związany jest on docelowo z platformą linux, a dokładniej Ubuntu (choć podejrzewam że występuje na również innych dystrybucjach). Testowałem to w kilku środowiskach: Plasma, Unity, Gnome. Problem da się dość łatwo przedstawić:
#include <QtWidgets>
#include <QtGui>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QWidget w;
QDialog d(&w);
QTimer::singleShot(1000, [&] { w.show(); });
QTimer::singleShot(2000, [&] { d.show(); });
QTimer::singleShot(3000, [&] { w.showMinimized(); });
QTimer::singleShot(4000, [&] { w.hide(); });
QTimer::singleShot(5000, [&] { w.show(); });
QTimer::singleShot(6000, [&] { w.showNormal(); });
a.exec();
}
Po kolei:
- pojawia się okienko w.
- pojawia się dialog d.
- w minimalizuje się razem z d.
- hide() chowa okienko główne z paska razem z dialogiem.
- show() znów pokazuje okienko zminimalizowane.
- showNormal() przywraca okienko.
Problem polega na tym, że chociaż główne okno jest tam gdzie powinno być, to dialog zniknął. Nie ma go. Nie pojawia się z powrotem. Próby wywoływania show, showNormal itp. na dialogu nie przynoszą rezultatu. Dodam jeszcze że na windowsie ten problem nie występuje w ogóle; zgodnie z oczekiwaniami wszystko jest na swoim miejscu.
Czy robię coś źle, czy to bug, czy wina mojego systemu? CIężko mi określić i do końca nie wiem co z tym zrobić. Problem jest bardzo uciążliwy, łamie kluczową funkcjonalność w aplikacjach korzystających z obszaru tray.
EDIT:
Qt jest w wersji 5.9.2