我在Linux上使用wxWidgets 3.0.2和Gtk。
我正在尝试使wxDataViewCtrl成为拖放操作的放置目标。我从wxTextDropTarget派生了一个类,然后调用wxDataViewCtrl :: SetDropTarget()使这个类的实例成为wxDataViewCtrl的放置目标。
然而,没有任何反应。每次我尝试在wxDataViewCtrl上删除某些内容时,wxDropSource :: DoDragDrop()方法都会返回wxDragCancel。对于我的自定义wxTextDropTarget类,我覆盖了OnEnter()方法并且只要我输入wxDataViewCtrl并且没有任何内容写入stdout,它就会写入stdout“OnEnter()”。
为了测试我甚至正在执行自定义wxTextDropTarget类并正确设置drop源,我在我的GUI中添加了一个wxTextCtrl并使得drop目标和一切按预期工作:wxDropSource :: DoDragDrop()返回wxDragCopy当我输入wxTextCtrl时,“OnEnter()”将被写入stdout。
wxDataViewCtrl不支持DnD吗?或者还有其他我忽略的东西?
答案 0 :(得分:0)
我以为我会跟进自己的帖子,以防其他人遇到同样的问题。
编写一个小测试程序只是为了测试控件和wxDataViewCtrl之间的DnD并发现它工作正常后,我回到原来的应用程序并盯着它看了一会儿,试着弄清楚我是什么做得与众不同事实证明,我需要在目标wxDataViewCtrl的PARENT窗口上调用SetDropTarget()而不是wxDataViewCtrl本身,即my_data_view_ctrl-> GetParent() - > SetDropTarget(blah blah blah);。
但是,我没有在我的测试程序中这样做,所以我觉得这有点奇怪。我的测试程序和我的实际程序之间的唯一区别是,在我的实际程序中,我在wxStaticBoxSizer中有wxDataViewCtrl,我认为这是个问题。我怀疑wxStaticBox(wxStaticBoxSizer使用的)是获取drop通知而不是wxDataViewCtrl,因此我需要设置它的SetDropTarget()而不是wxDataViewCtrl。