Задача была следующая, при запуске приложения, открывать два окна: QMainWindow и QDialog. QDialog должен быть скрыт от оконного менеджера, то есть пользователь не должен перемещать, ресайзить или закрывать это окно. Воспользовавшись Qt::WindowFlags я это и сделал:
Qt::SplashScreen | Qt::WindowStaysOnTopHint | Qt::NoDropShadowWindowHint
Но дальше обнаружился неприятный момент, если в macOS запустить это приложение и открыть Mission Control, то QDialog распознается им как окно и пользователь получает возможность им управлять. Привем в стандартных примерах есть
widgets/widgets/windowflags (
http://doc.qt.io/qt-5/qtwidgets-widgets-windowflags-example.html), если там выставить флаг Qt::SplashScreen, то работает именно так, как нужно - в Mission Control окошко PreviewWindow скрывается.
Не могу понять в чем именно дело, сравнивал флаги в примере и моем приложении абсолютно одинаковые qDebug() << this->windowFlags()
QFlags<Qt::WindowType>(SplashScreen|WindowTitleHint|WindowSystemMenuHint|WindowMinMaxButtonsHint|WindowStaysOnTopHint|WindowCloseButtonHint|NoDropShadowWindowHint|WindowFullscreenButtonHint)
Думал, может быть это из-за того, что у меня QDialog, а в примере QWidget, попоробовал поменять и все равно не работает.
В чем может быть дело? Код абсолютно одинаковый, за исключением того, что в примере не использовался конструктор форм qtcreator:
Alert::Alert(QWidget *parent) :
QDialog(parent),
ui(new Ui::Alert)
{
setAttribute(Qt::WA_TranslucentBackground);
ui->setupUi(this);
setWindowFlags(Qt::SplashScreen | Qt::WindowStaysOnTopHint | Qt::NoDropShadowWindowHint);
qDebug() << this->windowFlags();
}
Из родительской формы вызывается так:
alert = new Alert();
alert->show();