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