【问题标题】:Qt5 QTreeView editable with virtual keyboardQt5 QTreeView 可使用虚拟键盘进行编辑
【发布时间】:2016-07-15 21:09:34
【问题描述】:

在具有虚拟键盘小部件的触摸屏信息亭系统上工作。在所有对话框中,虚拟键盘是唯一的非触摸输入方法。我现在正在开发一个 QTreeView 以使用 QFileSystemModel 显示文件名,并且我添加了一个名为 New Name 的列(除了 Name 之外的所有其他列都被隐藏)。我已经为分配给 QTreeView 的委托覆盖了 createEditor() 和 destroyEditor(),并覆盖了模型的 data() 和 setData()。 createEditor() 覆盖返回一个指向本地 QLineEdit 对象的指针,以便我可以控制编辑结果(将它们插入到我的模型的新列数据对象中)。

使用我的物理键盘,我可以更改给定行的新名称单元格,但我无法弄清楚如何在我的虚拟键盘上键入而不失去焦点并在我正在编辑的项目上调用 destroyEditor() .关于如何做到这一点的任何想法?我已经深入研究了 Qt 代码,但到目前为止还没有运气。

【问题讨论】:

    标签: c++ qt qtreeview kiosk virtual-keyboard


    【解决方案1】:

    虚拟键盘不能有任何可聚焦的小部件。它应该是焦点中性的。那就不会抢焦点了。 This answer 有一个工作示例,它不会窃取焦点并合成发布到焦点小部件的按键事件。

    【讨论】:

    • 非常感谢您的意见。被拖到不同的方向,但我只是更改了我的代码,以便虚拟键盘小部件和按钮小部件的构造函数都有以下两行: setWindowFlags(Qt::X11BypassWindowManagerHint); setFocusPolicy(Qt::NoFocus);完美运行。再次感谢。
    • 顺便说一句,似乎我确实必须将它放在键盘和按键构造函数中,否则它似乎不起作用。此外,这两者都是必要的,没有一个是独立工作的。
    • 顺便说一句,我现在看到的还有一个问题。当我单击该项目时,我想用一些起始文本填充它,当我单击远离该项目然后单击它时,我不希望它为空白,但我希望它继续显示文本在应用编辑器之前在单元格中。在 createEditor() 中,我首先将 QLineEdit 对象设置为我希望它显示的文本,然后将其返回。但是没有显示文字。似乎在传递回 Qt 调用者时它会被空白。
    • @bmahf 如果您有单独的问题,请单独提出。确保包含一个最小的测试用例来重现它!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 2021-05-29
    相关资源
    最近更新 更多