Спокойное диалоговое окно без значка окна (системное меню)

Решение, которое я нашел, состояло в том, чтобы иметь эти <form>, предназначаются для скрытого iFrame. iFrame может тогда выполнить JS для отображения пользователю, что это завершено (на загрузке страницы).

5
задан swongu 6 August 2009 в 17:59
поделиться

1 ответ

Если вам вообще не нужны какие-либо кнопки с заголовками, вы можете добиться этого, установив несколько подсказок флагов окна :

setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint);

Демо-приложение Qt имеет пример приложения, которое позволяет вам поэкспериментировать с этими флагами ( Qt Demo-> Widgets-> Window Flags ), если вы хотите увидеть, что делают разные комбинации.


С другой стороны, если вы хотите свернуть / развернуть / Close, вы заметите, что Qt заставляет отображать системное меню и значок окна. Я думаю, что Qt немного обобщает платформы, поскольку очень легко найти примеры собственных диалогов Windows с кнопкой закрытия, но без системного меню и значка окна.

В этом случае вам понадобится код, специфичный для Windows, похожий на этот (непроверенный):

#if defined(Q_WS_WIN)
    // don't forget to #include <windows.h>
    HWND hwnd = winId();
    LONG_PTR style = GetWindowLongPtr(hwnd, GWL_STYLE);
    style &= ~WS_SYSMENU; // unset the system menu flag
    SetWindowLongPtr(hwnd, GWL_STYLE, style);
    // force Windows to refresh some cached window styles
    SetWindowPos(hwnd, 0, 0, 0, 0, 0, 
        SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
#endif

Изменить: Как прокомментировал swongu, это работает, только если вы хотите иметь кнопку закрытия без системного меню. Если вам нужна кнопка свертывания / развертывания, но нет системного меню, вам не повезло.

11
ответ дан 13 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: