C++ 在同一应用程序的实例之间拖放。(GtkTreeView)

C++ 在同一应用程序的实例之间拖放。(GtkTreeView),c++,drag-and-drop,gtk,gtkmm,gtktreeview,C++,Drag And Drop,Gtk,Gtkmm,Gtktreeview,我试图从GtkTreeView接收同一应用程序实例之间的拖放内容。内容是指向对象的指针,我无法在目标应用程序树视图上触发receive事件。我只能在同一个树状视图中接收拖动内容。以下是代码部分: ... vector<Gtk::TargetEntry> gtkTargetsDest, gtkTargetsSrc; gtkTargetsDest.push_back(Gtk::TargetEntry( "SrcFile **pSrcFiles", Gtk::TargetFlags(0

我试图从GtkTreeView接收同一应用程序实例之间的拖放内容。内容是指向对象的指针,我无法在目标应用程序树视图上触发receive事件。我只能在同一个树状视图中接收拖动内容。以下是代码部分:

...
vector<Gtk::TargetEntry> gtkTargetsDest, gtkTargetsSrc;
gtkTargetsDest.push_back(Gtk::TargetEntry(
  "SrcFile **pSrcFiles", Gtk::TargetFlags(0), 0));
gtkTargetsSrc.push_back(Gtk::TargetEntry(
   "SrcFile **pSrcFiles", Gtk::TargetFlags(0), 1));
_gtkTreeView.enable_model_drag_dest(gtkTargetsDest);
_gtkTreeView.enable_model_drag_source(gtkTargetsSrc);
...

void onGtkTreeViewDragDataReceived(
  const Glib::RefPtr<Gdk::DragContext> &pGdkDragContext, int x, int y,
  const Gtk::SelectionData &gtkSelData, guint info, guint time)
{
  if (info == 0) {
    SrcFile** pSrcFiles
      = (SrcFile**)gtkSelData.get_data();
    while (*pSrcFiles) {
      _ptrMFieldRef->add(*pSrcFiles); // add dropped src files
      ++pSrcFiles;
    }
  }
}
。。。
矢量gtkTargetsDest,gtkTargetsSrc;
Gtk目标目的地推回(Gtk::目标进入)(
“SrcFile**pSrcFiles”,Gtk::TargetFlags(0,0));
Gtk目标SRC.推回(Gtk::TargetEntry(
“SrcFile**pSrcFiles”,Gtk::TargetFlags(0,1));
_gtkTreeView.启用模型拖动目的地(gtkTargetsDest);
_gtkTreeView.启用模型拖动源(gtktargetsrc);
...
接收到无效的TktreeViewDragdar(
常量Glib::RefPtr&pGdkDragContext,int x,int y,
常量Gtk::SelectionData>kSelData、吉尼特信息、吉尼特时间)
{
如果(信息==0){
SrcFile**pSrcFiles
=(SrcFile**)gtkSelData.get_data();
while(*pSrcFiles){
_ptrMFieldRef->add(*pSrcFiles);//添加删除的src文件
++伪随机对照文件;
}
}
}

我没有使用
Gtk::TargetFlags(0)
而是尝试了
Gtk::TARGET_OTHER_应用程序
,但没有任何帮助。我得到一个提示,这可以与剪贴板一起工作,但我不知道这应该如何工作,因为接收事件没有被触发…

GtkTreeview的拖放方法似乎仅限于在同一个树小部件中拖动。在程序之间使用常规gtk拖放,例如,请参阅

要将拖放限制在特定应用程序中,可以设置/获取小部件名称,可以选择使用字符串中的PID,如“myapp.tree1 PID”