代码之家  ›  专栏  ›  技术社区  ›  Musher

如何将文件拖放到哪个gtkmm图像小部件

  •  0
  • Musher  · 技术社区  · 11 年前
    ....
    std::vector<Gtk::TargetEntry> listTargets;
    listTargets.push_back( Gtk::TargetEntry("STRING") );
    listTargets.push_back( Gtk::TargetEntry("text/plain") );
    
    image1->drag_dest_set(listTargets);
    image1->signal_drag_data_received().connect(sigc::mem_fun(*this,
                  &mainWindow::drop_event) );
    
    image2->drag_dest_set(listTargets);
    image2->signal_drag_data_received().connect(sigc::mem_fun(*this,
                      &mainWindow::drop_event) );
    ....
    

    和我的滴剂&删除事件处理程序函数:

    void mainWindow::drop_event(
            const Glib::RefPtr<Gdk::DragContext>& context, int, int,
            const Gtk::SelectionData& selection_data, guint, guint time)
    {
        std::cout << selection_data.get_data_as_string()  << std::endl;
    }
    

    使用此代码,我可以获得“拖动到图像小部件”的文件位置。输出如下:

    file:////opt/google/chrome/google-chrome.desktop
    file:////var/www/index.html
    file:///opt/libreoffice4.1/LICENSE.html
    

    没关系,我可以。但是,我如何获得:文件被丢弃到哪个图像(图像1或图像2小部件),如下所示:

    dropped to **image1** : file:////opt/google/chrome/google-chrome.desktop
    dropped to **image2** : file:////var/www/index.html
    dropped to **image1** : file:///opt/libreoffice4.1/LICENSE.html
    

    谢谢

    1 回复  |  直到 11 年前
        1
  •  1
  •   Mark    11 年前

    sigc allows you to bind extra arguments to your handlers.

    Hander变为:

    void mainWindow::drop_event(
            const Glib::RefPtr<Gdk::DragContext>& context, int, int,
            const Gtk::SelectionData& selection_data, guint, guint time, 
            Glib::ustring whichImage)
    {
        std::cout << "dropped to" << whichImage << ":" << selection_data.get_data_as_string()  << std::endl;
    }
    

    connect 则为:

    image1->signal_drag_data_received().connect(sigc::bind<Glib::ustring>(sigc::mem_fun(*this,
                  &mainWindow::drop_event), "image1" ));
    
    image2->signal_drag_data_received().connect( sigc::bind<Glib::ustring>(sigc::mem_fun(*this,
                      &mainWindow::drop_event), "image2"));