使用USB触摸屏在Qt 5.5中拖拽错误?

时间:2015-10-30 19:17:37

标签: c++ linux qt arm

我正在尝试在Linux Qt应用程序中使用自定义QAbstractTableModel在QTableView中使用drag'n'drop,但是存在问题。我将它跟踪到一个与QTableWidget一起使用的简约示例,因为它存在同样的问题,并且更容易重现。
当我开始拖动QTableWidget的单元格时,通常应该将拖动的单元格的内容绘制到鼠标光标上。在我的Windows机器上,这就像一个魅力(见图1 ,抱歉质量很差,但我不得不使用我的相机,因为否则我无法保持阻力)。

如果我在连接了触摸屏的嵌入式系统(ARM)上运行完全相同的代码,则拖动的单元格**的内容不会*绘制在光标上,而是在屏幕的左上角(只有一个'半'可见,另一半在视口外,见图2 )。

视窗:
enter image description here

带触摸的嵌入式系统(无可见鼠标光标):
enter image description here

我的嵌入式系统上的

uname -a
Linux fsimx6 3.0.35-F + S#3 SMP PREEMPT Sun Oct 4 15:41:19 CEST 2015 armv7l GNU / Linux

Qt版本:5.5.0

如何重现:
将QTableWidget放入应用程序,确保showDropIndicator,dragEnabled和dragDropOverwriteMode设置为true,dragDropMode设置为DragDrop,defaultDropAction设置为MoveAction。

我刚刚发现(在撰写这篇文章时),当我连接USB鼠标而不是使用USB触摸屏时,它也适用于我的嵌入式系统。不同之处在于使用USB鼠标时应用程序中会显示鼠标光标。连接触摸屏(eGalax Inc. eGalaxTouch EXC3000-0408-​​35.00.00)后,将不会自动绘制光标(Qt的决定?)。
当我使用触摸屏连接从dragMoveEvent()方法输出event.pos()时,我看到了正确的x / y位置,所以光标符号和蓝色内容框之间可能有某种连接吗?

1 个答案:

答案 0 :(得分:2)

我只是在这里推测,但似乎拖动的实现与鼠标/光标相关联。由于触摸没有光标,因此拖动时拖动的元素没有光标,因此它会粘到0x0。问题可能在于对小部件或平台插件的基本触摸支持,尽管我怀疑前者。使用Windows下的触摸屏进行测试以验证。

如果隐藏光标位于0x0,您可以尝试将其手动绑定到触摸位置,并希望这样做。例如creating mouse events that follow the drag position as you drag and post them into the application event loop

如果这不起作用,您可以实现自己的拖放机制,该机制适用于触摸。对于小部件来说,这可能会变得相当繁琐,我已经完成了QML的自定义拖放操作,而且它非常简单。

此外,您可以尝试查看拖动是否可以在QML中正常工作,QML更新,更具触摸中心性。旧的QtWidgets模块几乎是一个完成的交易,并没有真正设计触摸的想法。 QML非常容易和快速使用,所以我建议使用它,除非你需要旧小部件的额外功能,但仍未在QtQuick控件的QML小部件类似物中完全实现。