关于QT nativeWindow

1 篇文章 0 订阅

撸了两个多月的QT,脑袋一团浆糊,想把零碎的东西稍微粘合一下,否则永远不清不楚,flag就不立了,单纯先记一笔流水账,当然后面的账赊着,有朝一日来还掉,大可能性是直接失忆,《西部世界》里dolores说someday意味着永远也不,是否我的人格设定也纠缠了这个someday,不得而知,只能寄希望于finally。

1.系统级别 QApplication::setAttribute(Qt::AA_NativeWindows)

(1)设置Qt::AA_NativeWindows

所有控件均视为window,可通过QGuiApplication::allWindows()获取所有控件,然后获取窗口id和大小,并且,观察每个子widget大小(通过widget->geometry()获取),可发现均集中在屏幕左上角,并且在显示上,屏幕左上角均是矩形空白,并且随着缩放,矩形空白也在变化,widget大小也在变化,即整个widget是多个子widget的合并,每个widget在底层均有一个窗口系统的句柄和内存空间,对刷新会有一定影响。
对于依托父widget建立的widget,也有自己的窗口句柄,并且依然依附于父widget。
对于没有依托父widget建立的widget,有自己的窗口句柄,并且作为独立窗口,默认显示在屏幕左上角。

(2)不设置 Qt::AA_NativeWindows

只有toplevelWidget有本地窗口系统句柄,屏幕没有矩形空白,按照QT文档所述,非native_window由QT自己绘制。
对于依托父widget建立的widget,没有自己的窗口句柄,依附于父widget。
对于没有依托父widget建立的widget,有自己的窗口句柄,并且作为独立窗口,默认显示在屏幕左上角。

2.widget级别 setAttribute(Qt::WA_NativeWindow)

这个widget以及其祖先都会设置成native_window,并且父widget的所有子widget也都会变(enforceNativeChildren()函数),所以发现allWindows变多了,如果不需要所有祖先都变,需要加 setAttribute(Qt::WA_DontCreateNativeAncestors),如果不需要所有兄弟都变,需要加系统级参数QApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);

3.widget的winId()函数和setAttribute(Qt::WA_NativeWindow)类似,并且返回widget的句柄id

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值