qt写的程序作为一个模块嵌入到其他界面,怎么将qt的左上角的图标给去了?

搁浅的渔 2019-10-22 05:58:02
特别是qt模块里面的messagebox和一些弹窗,因为都是有标题框的,所以总是去不掉。
我也做了一些修改,例如:

messageBox.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint);

这个单独运行qt模块是没问题的图标没了,但是因为嵌入的关系,要给这个界面一个爸爸(parent),所以就不行了,求教各位大佬有没有好的解决办法?能够统一修改的。
...全文
538 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
搁浅的渔 2019-10-24
  • 打赏
  • 举报
回复
至于为什么我的设置之前的messageBox.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint);不管用,经过高人的指点,才发现messageBox.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint);这样设置就是可以得注意后面的关闭按钮没有了,但是你把关闭按钮放上去,那就会有图标.
这是官方的解释:WindowCloseButtonHint-》Adds a close button. On some platforms this implies Qt::WindowSystemMenuHint for it to work.(添加关闭按钮。在某些平台上,这意味着qt::windowsystemmenuhint可以工作。)
搁浅的渔 2019-10-24
  • 打赏
  • 举报
回复
已经解决了,两个办法:
1:直接设置Qt的messageBox.setWindowFlags(Qt::Tool);
2:用win32的接口:
HWND hwnd = (HWND)(messageBox.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);
这个方法好像关闭按钮就没有了。
所以我用的是第一种方法。
搁浅的渔 2019-10-24
  • 打赏
  • 举报
回复
因为是前人的代码,所以要是改起来,除了messagebox之外,我都不知道他有多少个是窗口是弹出来的,并且有标题栏的。重写的话,将是大工程
搁浅的渔 2019-10-23
  • 打赏
  • 举报
回复
引用
setWindowFlags(box->windowFlags() | Qt::FramelessWindowHint)这样设置
我按这样设置,弹框之后后面的界面直接白屏了。什么鬼?
搁浅的渔 2019-10-23
  • 打赏
  • 举报
回复
引用
setWindowFlags(box->windowFlags() | Qt::FramelessWindowHint)这样设置
这个不是设置没有标题栏吗,但是现实需求是要标题栏左上角的标题,但是不要图标,如果去了的话,那就是都没了。
huo5896324 2019-10-23
  • 打赏
  • 举报
回复
setWindowFlags(box->windowFlags() | Qt::FramelessWindowHint)这样设置
搁浅的渔 2019-10-23
  • 打赏
  • 举报
回复
再顶一下下。
fashion1982 2019-10-23
  • 打赏
  • 举报
回复
建议自定义widget,控制起来方便有效。
搁浅的渔 2019-10-23
  • 打赏
  • 举报
回复
引用
一般用QT都是为了界面好看,messagebox都是自绘,去掉系统标题栏,后面自绘,自己加标题栏。
网上有现成的
你好,messagebox倒是可以这样干,但是模块中其他的弹框的界面是widget的,也是有着标题栏,这也是要重绘吗?
走好每一步 2019-10-23
  • 打赏
  • 举报
回复
引用 8 楼 搁浅的渔 的回复:
引用
去掉标题栏,然后自绘
,之前也是这样想的,但因为这是一个很大的模块,可能有很多的弹窗,如果重写会是最后的办法了。
一般用QT都是为了界面好看,messagebox都是自绘,去掉系统标题栏,后面自绘,自己加标题栏。 网上有现成的
搁浅的渔 2019-10-23
  • 打赏
  • 举报
回复
引用
去掉标题栏,然后自绘
,之前也是这样想的,但因为这是一个很大的模块,可能有很多的弹窗,如果重写会是最后的办法了。
走好每一步 2019-10-23
  • 打赏
  • 举报
回复 1
去掉标题栏,然后自绘
搁浅的渔 2019-10-22
  • 打赏
  • 举报
回复
来人啊,再顶一下
搁浅的渔 2019-10-22
  • 打赏
  • 举报
回复
先自己顶一下

16,240

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧