处理qml 加载到quickQwidget中没办法切换输入法的问题
直接上代码
class custom_widget :public QQuickWidget {
public:
using Supper = QQuickWidget;
custom_widget() {
connect(quickWindow(), &QQuickWindow::activeFocusItemChanged, this, &custom_widget::onActiveFocusItemChanged);
}
protected:
//禁用alt + F4 关闭窗口的功能
bool nativeEvent(const QByteArray&, void* message, long*) override
{
MSG* msg = (MSG*)message;
if (WM_SYSKEYDOWN == msg->message && VK_F4 == msg->wParam)
return true;
return false;
}
public slots:
//槽函数,当切换焦点的时候 将所有的QQuickWidget的焦点都清除掉,就可以实现切换输入法的问题
//由于我这边是有了dock_widget,使用Quickview控件,会出现拖动QML白的问题 所有只能重写QQuickWidget 来修改不能切换输入法的问题
void onActiveFocusItemChanged() {
QQuickItem* pFocusItem = quickWindow()->activeFocusItem();
if (pFocusItem && pFocusItem->inherits("QQuickTextInput")) {
disconnect(quickWindow(), &QQuickWindow::activeFocusItemChanged, this, &custom_widget::onActiveFocusItemChanged);
clearFocus();
pFocusItem->forceActiveFocus();
}
}
};
新问题
会导致的问题是 第一次点击进入的时候 输入框不能输入内容 具体是什么原因还在调查,下面是我已知的一些结果
经过分析发现,是因为pFocusItem->forceActiveFocus();设置了控件的焦点 ,在QQuickItem 中的隐藏属性控件Quickinputtext没有被设置到可输入的状态,由于Quickinputtext是qt 没有公布的类 暂时没办法访问,所以应该暂时没有通过简单的方式解决。