有没有一种方法可以创建一个窗口(例如QDialog),而在左上角没有窗口图标?我尝试使用透明图标,但在此处留有空白。

编辑:下面的 richardwb的解决方案删除了​​系统菜单,但同时也删除了Minimize/Maximize/Close(标题按钮)。目前可能会这样做,但希望有一个保留字幕按钮的解决方案。

最佳答案

如果根本不需要任何字幕按钮,则可以通过设置一些window flag hints来实现:

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

Qt的演示应用程序有一个示例应用程序,如果您想查看不同的组合会做什么,可让您尝试使用这些标志(Qt演示->小部件->窗口标志)。

另一方面,如果要使用“最小化/最大化/关闭”按钮中的任何一个,您将注意到Qt强制显示系统菜单和窗口图标。我认为这是Qt对平台的概括,因为找到带有“关闭”按钮但没有系统菜单和窗口图标的 native 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所评论,这仅在您想要不带系统菜单的关闭按钮时才有效。如果您需要最小化/最大化按钮,但没有系统菜单,那么您就不走运了。

09-13 04:33