Yondu202 2017-11-06 07:09 采纳率: 0%
浏览 1250
已采纳

Qt 5.7 QTextEdit 中文输入法半成品被自动提交,该如何处理?

描述

界面有两个控件,QListWidget 和 QTextEdit,
QListWidget 条目为自定义控件,如一个 QPushButton。

代码

     for(int i = 0; i < 10; i++) {
        QPushButton *box = new QPushButton;
        box->setFocusPolicy(Qt::NoFocus);
        box->setText(QString::number(i));
        QListWidgetItem *item = new QListWidgetItem;
        ui->listWidget->addItem(item);
        ui->listWidget->setItemWidget(item, box);
    }

    QTimer *timer = new QTimer;
    connect(timer, &QTimer::timeout, [=] {
        QListWidgetItem *item = ui->listWidget->takeItem(0);
        delete item; item = nullptr;
        timer->stop();
    });

    timer->start(5000);

问题现象

当使用 微软拼音/谷歌拼音 输入内容时,
图片说明
此时 QListWidget 条目删除,输入法的半成品内容会自动提交到 QTextEdit 中。
图片说明

说明

与控件焦点无关,此时 QTextEdit 仍有焦点。

期望结果

QTextEdit 内容无变化,输入法内容不被提交

以上该如何处理呢?

  • 写回答

2条回答 默认 最新

  • Yondu202 2017-12-06 03:11
    关注

    此问题目前已解决。
    原因就是 QListWidget 的 item 的 widget 被删除引起的,但捕获了 app 的所有事件,未发现直接导致的原因。
    最后使用 Qt 的 MV 模型。
    主要是自定义 Delegate 来绘制 View 的 item,即在 Delegate 的 paint(...) 里用 QPainter 画图及文字,这样就消除了之前 item 里的 widget 删除的处理。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同