Qt 5.12 qml使用TextInput输入中文有问题

qml熟悉了个大概,打算输入文字和后台交互的时候发现默认的英文输入法切换不了中文输入法了,因为我把win10系统的输入法设置为默认英文,其他程序输入框中按shift即可切换输入法,但是我写的qt程序就不行,对比了一下其他可以输入中文的qt程序,发现是qml文件引用方式的问题

我写的qml文件是用QQuickWidget设置source引用的

mainWindow::mainWindow(QWidget *parent)
    : QWidget(parent)
{ 
    m_contentView = new QQuickWidget();
    m_contentView->setSource(QUrl("qrc:///Qml/mainWindow.qml")); //设置对应的qml文件

    // qml对应的widget添加到本窗口
    QVBoxLayout *layout = new QVBoxLayout;
    layout->setContentsMargins(0, 0, 0, 0);
    layout->setSpacing(0);
    layout->addWidget(m_contentView);
    setLayout(layout);
}

改成

mainWindow::mainWindow(QWidget *parent)
    : QWidget(parent)
{
    this->resize(1000, 600);

    m_contentView = new QQuickView();
    m_contentView->setSource(QUrl("qrc:///Qml/mainWindow.qml")); 

    QWidget *pViewContainer = this->createWindowContainer(m_contentView, this);
    pViewContainer->resize(size());
}

mainWindow继承自QWidget,可以不用改,但是QQuickView需要手动delete,不然点击关闭按钮后,程序会阻塞住。

然后mainWindow.qml中的TextField控件就可以直接按shift输入中文了

 

如果依然想使用QQuickWidget,则需要继承QQuickWidget,

class tempWidget:public QQuickWidget{
    Q_OBJECT
public:
    using Supper = QQuickWidget;
    tempWidget();

public slots:
    void onActiveFocusItemChanged();
};

cpp文件

tempWidget::tempWidget(){
    connect(quickWindow(), &QQuickWindow::activeFocusItemChanged, this, &tempWidget::onActiveFocusItemChanged);
}

void tempWidget::onActiveFocusItemChanged(){
    QQuickItem *pFocusItem = quickWindow()->activeFocusItem();
    if (pFocusItem && pFocusItem->inherits("QQuickTextInput")){
        disconnect(quickWindow(), &QQuickWindow::activeFocusItemChanged, this, &tempWidget::onActiveFocusItemChanged);
        clearFocus();
        pFocusItem->forceActiveFocus();
    }
}

具体原因不知道,只记得google的时候看到过这个解决方案

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值