文章目录
- 方法一:通过代码动态设置
- 1、隐藏最大化按钮
- 2、隐藏最小化按钮
- 3、隐藏关闭按钮
- 方法 1:移除 `WindowCloseButtonHint`
- 方法 2:使用 `Qt::CustomizeWindowHint` 并手动控制按钮
 
- 4、同时隐藏最大化和最小化按钮
- 5、同时隐藏最大化和关闭按钮
- 6、完全隐藏所有按钮(无标题栏)
- 7、显示所有按钮(默认行为)
 
- 方法二:在Qt设计师中设置
- 注意事项
- 完整代码示例
- 总结
- Qt 窗口按钮控制总结:隐藏最大化、最小化和关闭按钮
- 1. 基本原理:`WindowFlags` 窗口标志
- 2. 隐藏最大化按钮
- 3. 隐藏最小化按钮
- 4. 隐藏关闭按钮
- 方法 1:移除 `WindowCloseButtonHint`
- 方法 2:使用 `Qt::CustomizeWindowHint`
 
- 5. 同时隐藏多个按钮
- 隐藏最大化和关闭按钮(仅保留最小化按钮)
- 隐藏最小化和关闭按钮(仅保留最大化按钮)
- 隐藏所有按钮(无边框窗口)
 
- 6. 恢复默认按钮
- 7. 跨平台注意事项
- 8. 推荐做法
- 9. 完整代码示例
- 10. 总结
 
在Qt设计师中隐藏或显示窗口的最大化、最小化按钮,可以通过设置窗口的 窗口标志(Window Flags) 来实现。以下是具体方法:
方法一:通过代码动态设置
如果需要在运行时控制按钮的显示,可以在窗口的构造函数中添加以下代码:
1、隐藏最大化按钮
// 隐藏最大化按钮(保留其他按钮)
setWindowFlags(windowFlags() & ~Qt::WindowMaximizeButtonHint);
2、隐藏最小化按钮
// 隐藏最小化按钮(保留其他按钮)
setWindowFlags(windowFlags() & ~Qt::WindowMinimizeButtonHint);
3、隐藏关闭按钮
Qt 默认不提供直接隐藏关闭按钮的标志,但可以通过以下方式实现:
方法 1:移除 WindowCloseButtonHint
 
// 隐藏关闭按钮(保留最小化和最大化按钮)
setWindowFlags(windowFlags() & ~Qt::WindowCloseButtonHint);
show(); // 必须调用 show() 使更改生效
注意:某些系统(如 Windows)可能仍然显示关闭按钮,因为系统可能强制保留它。
方法 2:使用 Qt::CustomizeWindowHint 并手动控制按钮
 
// 完全自定义窗口按钮(隐藏所有按钮)
setWindowFlags(Qt::Window | Qt::WindowMinimizeButtonHint);
show();
这样,窗口只显示 最小化 按钮,而 最大化 和 关闭 按钮会被隐藏。
4、同时隐藏最大化和最小化按钮
// 隐藏最大化和最小化按钮,只保留关闭按钮
setWindowFlags(Qt::Window | Qt::WindowCloseButtonHint);
5、同时隐藏最大化和关闭按钮
// 隐藏最大化和关闭按钮,仅保留最小化按钮
setWindowFlags(Qt::Window | Qt::WindowMinimizeButtonHint);
show();
6、完全隐藏所有按钮(无标题栏)
如果希望完全隐藏标题栏(包括所有按钮),可以使用 FramelessWindowHint:
setWindowFlags(Qt::FramelessWindowHint);
show();
注意:这样会失去窗口拖动和调整大小的能力,需要手动实现。
7、显示所有按钮(默认行为)
// 恢复默认按钮(最大化、最小化、关闭)
setWindowFlags(Qt::Window);
方法二:在Qt设计师中设置
虽然Qt设计师没有直接提供勾选框来隐藏按钮,但可以通过手动编辑 windowFlags 属性实现:
- 打开Qt设计师,选择主窗口(如 QMainWindow或QWidget)。
- 在右侧 属性编辑器 中找到 windowFlags属性。
- 输入组合标志(例如): 
  - 隐藏最大化按钮:Qt::Window | Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint
- 隐藏最小化按钮:Qt::Window | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint
- 隐藏最大化和最小化按钮:Qt::Window | Qt::WindowCloseButtonHint
 
- 隐藏最大化按钮:
注意事项
- 平台差异:某些系统(如 macOS)可能忽略这些设置,强制显示按钮。
- 副作用:修改 windowFlags可能导致窗口属性重置(如任务栏图标),建议在构造函数中调用setWindowFlags后执行:show(); // 重新渲染窗口
- 自定义标题栏:如需完全控制按钮,可隐藏默认标题栏(Qt::FramelessWindowHint),然后自行实现按钮。
完整代码示例
// 隐藏最大化按钮(保留其他按钮)
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
    setWindowFlags(windowFlags() & ~Qt::WindowMaximizeButtonHint);
    // 其他初始化代码...
}
// 隐藏最小化和最大化按钮(仅保留关闭按钮)
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
    setWindowFlags(Qt::Window | Qt::WindowCloseButtonHint);
    // 其他初始化代码...
}
总结
| 需求 | 代码 | 
|---|---|
| 隐藏最大化按钮 | setWindowFlags(windowFlags() & ~Qt::WindowMaximizeButtonHint); | 
| 隐藏关闭按钮 | setWindowFlags(windowFlags() & ~Qt::WindowCloseButtonHint); | 
| 隐藏最大化和关闭按钮 | setWindowFlags(Qt::Window | Qt::WindowMinimizeButtonHint); | 
| 隐藏所有按钮(无边框) | setWindowFlags(Qt::FramelessWindowHint); | 
| 恢复默认按钮 | setWindowFlags(Qt::Window); | 
Qt 窗口按钮控制总结:隐藏最大化、最小化和关闭按钮
在 Qt 开发中,窗口的标题栏通常包含 最小化(Minimize)、最大化(Maximize) 和 关闭(Close) 按钮。但在某些应用场景下,我们可能需要隐藏部分或全部按钮,例如:
- 对话框 可能不需要最大化按钮。
- 全屏应用 可能需要隐藏所有按钮。
- 自定义标题栏 需要移除默认按钮并自行实现。
本文将详细介绍如何在 Qt 中通过代码动态控制这些按钮的显示与隐藏,并提供不同场景下的解决方案。
1. 基本原理:WindowFlags 窗口标志
 
Qt 的窗口行为由 WindowFlags(窗口标志)控制,它是一组 Qt::WindowType 枚举值的组合。常用的标志包括:
- Qt::WindowMinimizeButtonHint(最小化按钮)
- Qt::WindowMaximizeButtonHint(最大化按钮)
- Qt::WindowCloseButtonHint(关闭按钮)
- Qt::FramelessWindowHint(无边框窗口,隐藏所有按钮)
我们可以通过 setWindowFlags() 修改窗口标志,但要注意:
- 必须调用 show()使更改生效,否则窗口可能不会刷新。
- 某些系统(如 macOS)可能强制保留某些按钮,导致设置不完全生效。
2. 隐藏最大化按钮
如果只需要隐藏最大化按钮,可以移除 Qt::WindowMaximizeButtonHint:
setWindowFlags(windowFlags() & ~Qt::WindowMaximizeButtonHint);
show(); // 必须调用 show() 刷新窗口
适用场景:
- 对话框窗口(如登录框)不需要最大化功能。
- 固定大小的应用(如工具窗口)。
3. 隐藏最小化按钮
如果需要隐藏最小化按钮,可以移除 Qt::WindowMinimizeButtonHint:
setWindowFlags(windowFlags() & ~Qt::WindowMinimizeButtonHint);
show();
适用场景:
- 全屏应用(如游戏、视频播放器)。
- 某些系统托盘程序不需要最小化按钮。
4. 隐藏关闭按钮
Qt 默认不提供直接隐藏关闭按钮的方法,但可以通过以下方式实现:
方法 1:移除 WindowCloseButtonHint
 
setWindowFlags(windowFlags() & ~Qt::WindowCloseButtonHint);
show();
注意:在 Windows 上可能仍然显示关闭按钮,因为系统可能强制保留它。
方法 2:使用 Qt::CustomizeWindowHint
 
setWindowFlags(Qt::Window | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint);
show();
这样,窗口仅保留最小化和最大化按钮,关闭按钮被隐藏。
适用场景:
- 关键应用(如系统监控工具)防止用户误关闭。
- 需要自定义关闭逻辑(如弹出确认对话框)。
5. 同时隐藏多个按钮
隐藏最大化和关闭按钮(仅保留最小化按钮)
setWindowFlags(Qt::Window | Qt::WindowMinimizeButtonHint);
show();
隐藏最小化和关闭按钮(仅保留最大化按钮)
setWindowFlags(Qt::Window | Qt::WindowMaximizeButtonHint);
show();
隐藏所有按钮(无边框窗口)
setWindowFlags(Qt::FramelessWindowHint);
show();
适用场景:
- 自定义标题栏(如音乐播放器、现代化 UI)。
- 游戏或全屏应用。
6. 恢复默认按钮
如果需要恢复默认的窗口按钮(最小化、最大化、关闭),可以重置为 Qt::Window:
setWindowFlags(Qt::Window);
show();
7. 跨平台注意事项
- Windows: 
  - WindowCloseButtonHint可能无法完全隐藏关闭按钮。
 
- macOS: 
  - 系统可能强制显示关闭按钮。
- 无边框窗口 (FramelessWindowHint) 可能影响窗口拖动。
 
- Linux: 
  - 行为较接近预期,但仍需测试不同桌面环境(GNOME/KDE)。
 
8. 推荐做法
- 优先使用 setWindowFlags()+show()动态调整窗口按钮。
- 如果完全自定义 UI,建议使用 FramelessWindowHint并自行实现标题栏。
- 测试不同平台,确保行为符合预期。
9. 完整代码示例
#include <QMainWindow>
#include <QPushButton>
class MainWindow : public QMainWindow {
public:
    MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {
        // 隐藏最大化和关闭按钮,仅保留最小化按钮
        setWindowFlags(Qt::Window | Qt::WindowMinimizeButtonHint);
        show();
        // 添加一个按钮用于恢复默认窗口按钮
        QPushButton *btn = new QPushButton("恢复默认按钮", this);
        btn->move(50, 50);
        connect(btn, &QPushButton::clicked, [this]() {
            setWindowFlags(Qt::Window);
            show();
        });
    }
};
10. 总结
| 需求 | 代码 | 
|---|---|
| 隐藏最大化按钮 | setWindowFlags(windowFlags() & ~Qt::WindowMaximizeButtonHint); | 
| 隐藏最小化按钮 | setWindowFlags(windowFlags() & ~Qt::WindowMinimizeButtonHint); | 
| 隐藏关闭按钮 | setWindowFlags(windowFlags() & ~Qt::WindowCloseButtonHint);(可能不完全生效) | 
| 隐藏最大化和关闭按钮 | `setWindowFlags(Qt::Window | 
| 隐藏所有按钮(无边框) | setWindowFlags(Qt::FramelessWindowHint); | 
| 恢复默认按钮 | setWindowFlags(Qt::Window); | 
通过合理使用 WindowFlags,我们可以灵活控制 Qt 窗口的按钮显示,适应不同的应用场景。
通过上述方法,可以灵活控制窗口按钮的显示与隐藏。
上一篇:C++中如何使用Cshapes类的addpicture函数将图片插入excel




















