如何取消QMainWindow的Qt.FramelessWindowHint窗口标志?
Qt 窗口边框动态切换方案(初始无边框,后续恢复)
核心解决逻辑
Qt中修改窗口标志后,必须触发窗口重绘才能生效。直接移除FramelessWindowHint标志后,需要恢复默认窗口的基础属性并刷新窗口状态。
代码示例
- 初始设置无边框窗口
# 初始化阶段设置无边框 self.setWindowFlag(Qt.FramelessWindowHint) self.show()
- 后续恢复带边框窗口
# 移除无边框标志 self.setWindowFlag(Qt.FramelessWindowHint, False) # 恢复窗口默认基础属性(可根据需求调整) self.setWindowFlag(Qt.Window, True) self.setWindowFlag(Qt.WindowTitleHint, True) self.setWindowFlag(Qt.WindowSystemMenuHint, True) self.setWindowFlag(Qt.WindowMinMaxButtonsHint, True) # 触发窗口重绘,使标志修改生效 self.show()
注意事项
- 必须通过
setWindowFlag(flag, False)的形式移除指定标志,仅设置新标志无法覆盖原有配置。 - 调用
show()或setVisible(True)是关键,Qt需要重新渲染窗口边框样式才能完成切换。 - 若窗口有其他自定义标志,可按需保留或恢复对应配置,不影响核心的边框切换逻辑。
内容的提问来源于stack exchange,提问作者atiya khodari
相关产品推荐
相关产品推荐

