《QDebug 2021年12月》

一、Qt Widgets 问题交流

1.QOpenGLWidgets 窗口透明

参照 Qt 文档描述:https://doc.qt.io/qt-5/qopenglwidget.html

文档机翻:

将其他小部件放在下面并使 QOpenGLWidget 透明不会导致预期的结果:下面的小部件将不可见。这是因为实际上 QOpenGLWidget 是在所有其他常规的非 OpenGL 小部件之前绘制的,因此透视类型的解决方案是不可行的。其他类型的布局,例如在 QOpenGLWidget 顶部具有小部件,将按预期运行。

在绝对必要时,可以通过在QOpenGLWidget上设置Qt::WA_AlwaysStackOnTop属性来克服此限制。但是请注意,这会破坏堆叠顺序,例如,在 QOpenGLWidget 顶部不可能有其他小部件,因此只应在需要半透明 QOpenGLWidget 和下方可见其他小部件的情况下使用它。

请注意,当下面没有其他小部件并且打算拥有一个半透明窗口时,这不适用。在这种情况下,在顶级窗口上设置Qt::WA_TranslucentBackground的传统方法就足够了。请注意,如果透明区域被QOpenGLWidget唯一需要的话,那么Qt的:: WA_NoSystemBackground将需要转回false启用后的Qt :: WA_TranslucentBackground。此外,根据系统,也可能需要通过setFormat ()为 QOpenGLWidget 的上下文请求 alpha 通道。

默认状态下,QOpenGLWidget 窗口渲染透明时会显示为黑色。下图红色和蓝色为 QWidget 部件,分别置于底层和顶层,绿色三角为 QOpenGLWidget 部件。

 

给 QOpenGLWidget 设置 setAttribute(Qt::WA_AlwaysStackOnTop) 后,虽然透明有了,但是会浮在所有 QWidget 上层。即文档说的破坏了堆叠顺序。

 

顶层窗口设置 setAttribute(Qt::WA_TranslucentBackground) 后,虽然堆叠顺序有了,但是透明部分直接穿透了。

 

 目前没找到好的透明方案。

二、Qt Quick 问题交流

1.QML 文件有中文赋值,在使用该组件时显示 M300

如果在自定义的 QML 组件文件中对属性赋值中文字符串,那么可能会出现 M300 的警告,这样会影响到其他的智能提示。将 QML 文件编码从无 BOM UTF8 改为带 BOM UTF8 之后,Qt Creator 的 QML 编辑器就能正常解析不出现 M300 警告了。

在新出的 QtCreator 6 中,此问题以得到解决,不用设置 BOM 了。

  

2.部分基本类型作为 Qt 容器数据类型进行实例化后,不能在 QML 中识别

报错信息如下:

Error: Unknown method return type: QList<qint64>

需要注册元对象类型:

qRegisterMetaType<QList<qint64>>("QList<qint64>");

此外,高版本对 c++ 类型的支持比低版本更好一点,比如上面的 QList<qint64> ,在 Qt5.9.9 中打印如下: 

qml: object QVariant(QList<qlonglong>)

而在 Qt5.15.2 中可以输出列表中的值:

qml: object [222]

3.QML 与 C++ 之间 int 和 qint64 的传递 

JS 的数值都是 number 双精度类型,传递给 C++ 函数的 int 和 int64 函数参数时,int 会向下取整,qint64 会四舍五入。

var a = 16777215
var b = 281474976710655
obj.testWirte(a, b)
obj.testWirte(a+0.8, b+0.8)
obj.testWirte(a+0.2, b+0.2)
obj.testWirte(a-0.8, b-0.8)
obj.testWirte(a-0.2, b-0.2)
CppObject::testWirte 16777215 281474976710655
CppObject::testWirte 16777215 281474976710655
CppObject::testWirte 16777215 281474976710656
CppObject::testWirte 16777215 281474976710655
CppObject::testWirte 16777214 281474976710654
CppObject::testWirte 16777214 281474976710655

三、其他 

1.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龚建波

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值