代码之家  ›  专栏  ›  技术社区  ›  swongu

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

  •  5
  • swongu  · 技术社区  · 17 年前

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

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

    1 回复  |  直到 17 年前
        1
  •  12
  •   IMAN4K    9 年前

    window flag hints :

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

    Qt的演示应用程序有一个示例应用程序,可以让您试验这些标志( Qt演示->小部件->窗旗 )如果你想看看不同的组合有什么作用。


    另一方面,如果您想要任何最小化/最大化/关闭按钮,您将注意到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所评论的,只有当你想要一个没有系统菜单的关闭按钮时,这才有效。如果你想要一个最小化/最大化按钮,但没有系统菜单,那你就倒霉了。

        2
  •  0
  •   thomasa88    4 年前

    setWindowFlag(Qt::CustomizeWindowHint, true);
    setWindowFlag(Qt::WindowTitleHint, true);
    setWindowFlag(Qt::WindowSystemMenuHint, false);