stdware / qwindowkit

Cross-platform frameless window framework for Qt. Support Windows, macOS, Linux.
Apache License 2.0
442 stars 67 forks source link

`setHitTestVisible`在Qt 5.15.2下会出现重载问题 #87

Closed mentalfl0w closed 2 months ago

mentalfl0w commented 2 months ago

错误信息如下:

Error: Unable to determine callable overload.  Candidates are:
    setHitTestVisible(const QQuickItem*)
    setHitTestVisible(const QQuickItem*,bool)

无论是指定bool还是不指定bool都会出现问题 解决方案是将quickwindowagent.h中的这个函数的const去掉,因为Qt 5.15.2的qml引擎无法转化QML组件指针为const QQuickItem*,但Qt 6可以 有时间的话我会提个PR,或者看大家是否有更好的解决方法

ZhongHuaRong commented 2 months ago

qRegisterMetaType<QQuickItem>("const QQuickItem"); 添加这一句就可以了,主要是类型不正确导致的重载失败问题

wangwenx190 commented 2 months ago

qRegisterMetaType<QQuickItem>("const QQuickItem"); 添加这一句就可以了,主要是类型不正确导致的重载失败问题

有道理,不过其实接口里也没必要const,我改下

mentalfl0w commented 2 months ago

qRegisterMetaType<QQuickItem>("const QQuickItem"); 添加这一句就可以了,主要是类型不正确导致的重载失败问题

这样是在QML引擎内全局注册const QQuickItem*QQuickItem*,但Qt 5的QML引擎似乎对于类型转换非常严格,我担心全局范围内的修改这样可能会造成一些我们意想不到的问题,我觉得能在影响范围最小的情况下修复这个问题(修改接口)会更好。

SineStriker commented 2 months ago

qRegisterMetaType<QQuickItem>("const QQuickItem"); 添加这一句就可以了,主要是类型不正确导致的重载失败问题

这样是在QML引擎内全局注册const QQuickItem*QQuickItem*,但Qt 5的QML引擎似乎对于类型转换非常严格,我担心全局范围内的修改这样可能会造成一些我们意想不到的问题,我觉得能在影响范围最小的情况下修复这个问题(修改接口)会更好。

有道理