一、Qt Widgets 问题交流
1.
二、Qt Quick 问题交流
1.Qt5 QML 在某些环境下,有些字体中文渲染有问题
如 Qt5.15 在部分安卓机上复制的复只有半截宽,半径的径字也不对,等等
用 Qt6.7 测试则正常,或者换成其他如小米、阿里巴巴等的免费字体也显示正常。
2.Qt5 安卓滑动触发Home键等操作后,MouseArea失效
测试环境:Android 13 / 14 + Qt 5.15.2
侧滑返回 Home 时(未关闭程序),如果下方有处理触摸 or 点击事件的对象(如 MouseArea),重新进入软件时,该对象不能再处理触摸 or 点击事件,且会提示:
TouchPointPressed without previous release event QQuickEventPoint
因为上次只处理了 press 还没处理 release。不过 Qt 6.7 测试已经修复了。
Qt Bug Tracker 中有个临时方案,安卓 Touch Cancel 的时候主动触发一次 QTouchEvent:
https://bugreports.qt.io/browse/QTBUG-72110
public static native void touchEventCanceled();
@Override
public boolean onTouchEvent(MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_CANCEL)
{
m_instance.touchEventCanceled();
}
return super.onTouchEvent(event);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev)
{
if(ev.getAction() == MotionEvent.ACTION_CANCEL)
{
m_instance.touchEventCanceled();
}
return super.dispatchTouchEvent(ev);
}
#include "vtouchhelper.h"
VTouchHelper* touchHelper;
VTouchHelper::VTouchHelper(QQmlApplicationEngine* a_engine, QObject *parent) : QObject(parent)
{
touchHelper = this;
m_rootObject = a_engine->rootObjects().at(0);
}
void VTouchHelper::cancelTouchEvent()
{
QGuiApplication::postEvent(m_rootObject, new QTouchEvent( QEvent::TouchCancel, 0, 0, 0));
}
#ifdef Q_OS_ANDROID
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL
Java_com_myapp_core_AndroidExtras_touchEventCanceled(JNIEnv *env, jobject)
{
touchHelper->cancelTouchEvent();
}
#ifdef __cplusplus
}
#endif
#endif
不过他这个代码事件只发给了 QML 根 Window 的 MouseArea,如果多个 Window 应该得修改下。
3.Qt6.7.2 安卓分屏时,Window 的宽高属性没有变化,会导致显示不全
Qt Bug Tracker:https://bugreports.qt.io/browse/QTBUG-107692
该 Bug Qt6.7.3 已修复
4.剪贴板玩会儿游戏,周末再更