没有窗口图标的Qt对话框(系统菜单)

时间:2009-08-05 21:18:06

标签: windows qt qt4 icons

有没有办法创建一个窗口(例如QDialog),左上角没有窗口图标?我尝试过使用透明图标,但在那里留下了空白。

编辑:下面的richardwb解决方案删除了​​系统菜单,同时也删除了最小化/最大化/关闭(字幕按钮)。这可能现在可以做,但希望有一个解决方案可以保留字幕按钮。

1 个答案:

答案 0 :(得分:10)

如果您根本不需要任何字幕按钮,可以通过设置window flag hints来实现此目的:

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

Qt的Demo应用程序有一个示例应用程序,可以让你试验这些标志( Qt Demo-> Widgets-> Window Flags ),如果你想看看有什么不同的组合。


另一方面,如果您想要任何最小化/最大化/关闭按钮,您会注意到Qt强制显示系统菜单和窗口图标。我认为这是Qt概括了一下平台,因为很容易找到本机Windows对话框的示例一个关闭按钮,但没有系统菜单和窗口图标。< / p>

在这种情况下,您将需要一些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评论的那样,只有在你想要一个没有系统菜单的关闭按钮时才有效。如果你想要一个最小化/最大化按钮但没有系统菜单,那你就不走运了。