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

标签 windows qt qt4 icons

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

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

最佳答案

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

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

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


另一方面,如果您想要任何最小化/最大化/关闭按钮,您会注意到 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 评论的那样,这仅在您想要一个没有系统菜单的关闭按钮时才有效。如果您想要最小化/最大化按钮但没有系统菜单,那您就不走运了。

关于windows - 没有窗口图标的 Qt 对话框(系统菜单),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1235812/

相关文章:

windows - PEB 结构中的 BeingDebugged 标志的用途是什么?

c++ - 在 OpenGL 中使用 Qt 拾色

c++ - 拒绝信号似乎只发出一次

c++ - QMap 或 QHash 中的 QSet

qt - QCompleter 自定义完成规则

c - 简单的 C 程序在 Windows 上崩溃

windows - 通用调用约定如何处理 AVX 寄存器?

windows - Postgresql:无法建立连接,因为目标机器主动拒绝它

linux - 如何在linux中编写和加载GUI?

css - 为 QSpinBox/QComboBox 设置边框半径会对上/下控件产生意外的副作用