当前位置:首页 C++ > 正文

linux c++ 拖拽事件

作者:野牛程序员:2023-07-09 09:10:30 C++阅读 2707

在Linux中,使用C++编写GUI应用程序可以通过一些库实现拖放(拖拽)事件。一个常用的图形库是GTK+,下面是一个简单的示例代码,演示了如何使用GTK+实现拖放事件。

#include <gtk/gtk.h>

// 拖放源的回调函数
static gboolean drag_data_get(GtkWidget* widget, GdkDragContext* context, GtkSelectionData* selection_data, guint info, guint time, gpointer user_data)
{
    // 在这里设置拖放数据
    const gchar* text = "Hello, Drag and Drop!";
    gtk_selection_data_set_text(selection_data, text, -1);

    return TRUE;
}

// 拖放目标的回调函数
static gboolean drag_data_received(GtkWidget* widget, GdkDragContext* context, gint x, gint y, GtkSelectionData* selection_data, guint info, guint time, gpointer user_data)
{
    // 在这里获取拖放的数据
    gchar* text = gtk_selection_data_get_text(selection_data);
    if (text != NULL)
    {
        g_print("Received data: %s\\n", text);
        g_free(text);
    }

    // 返回值表示拖放是否成功接收数据
    return TRUE;
}

int main(int argc, char* argv[])
{
    gtk_init(&argc, &argv);

    GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);

    // 创建一个可拖放源的标签
    GtkWidget* label = gtk_label_new("Drag Me!");
    gtk_label_set_selectable(GTK_LABEL(label), TRUE);
    gtk_drag_source_set(label, GDK_BUTTON1_MASK, NULL, 0, GDK_ACTION_COPY);
    g_signal_connect(label, "drag-data-get", G_CALLBACK(drag_data_get), NULL);

    // 创建一个可接受拖放的标签
    GtkWidget* target = gtk_label_new("Drop Here!");
    gtk_label_set_selectable(GTK_LABEL(target), TRUE);
    gtk_drag_dest_set(target, GTK_DEST_DEFAULT_ALL, NULL, 0, GDK_ACTION_COPY);
    g_signal_connect(target, "drag-data-received", G_CALLBACK(drag_data_received), NULL);

    GtkWidget* vbox = gtk_vbox_new(TRUE, 5);
    gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0);
    gtk_box_pack_start(GTK_BOX(vbox), target, TRUE, TRUE, 0);

    gtk_container_add(GTK_CONTAINER(window), vbox);

    gtk_widget_show_all(window);

    gtk_main();

    return 0;
}

这个示例程序创建了一个包含两个标签的窗口,一个标签作为拖放源,另一个标签作为拖放目标。你可以点击并拖动源标签,然后将其释放到目标标签上。在拖放源的回调函数中,我们设置了拖放的数据,而在拖放目标的回调函数中,我们获取并处理了拖放的数据。

请注意,这个示例使用了GTK+库,因此在编译和运行代码之前,你需要确保已经安装了GTK+库和相关的开发包。你可以使用适合你的Linux发行版的包管理器进行安装。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击