我正在构建一个应用程序,在某些时候需要知道用户指针的位置。我正在使用 GTK4 和 C。
gdk_device_get_position
,但我在GTK4文档中找不到它,表明它不再受支持。如果我缺少一些同等的东西,我很想知道。GtkEventController *my_controller = gtk_event_controller_motion_new ();
gtk_widget_add_controller (my_widget, my_controller);
g_signal_connect(my_controller, "motion", my_function, NULL);
当我将鼠标移动到小部件内时,它会成功触发并运行
my_function
。阅读下面的运动信号签名 (https://docs.gtk.org/gtk4/signal.EventControllerMotion.motion.html),它似乎应该宣布 x 和 y 坐标。可以这么说,我如何“理解”这些?
void
motion (
GtkEventControllerMotion* self,
gdouble x,
gdouble y,
gpointer user_data
)
抱歉,如果我遗漏了一些明显的东西!如果我没有完成我的文档/SO 尽职调查,就不会问。
谢谢!
主题曾经出现在以下问题上:如何在gtk4中的鼠标移动事件上旋转开罗圆圈(音量按钮)?
以下是解决方法的总结:
#include"mous-coordin.h"
void pointer_motion_event (GtkEventController *gesture,
gdouble x,
gdouble y,
gpointer user_data)
{
g_print(" x = %f y = %f\n", x,y);
}
void click_event (GtkEventController *gesture,
gdouble x,
gdouble y,
gpointer user_data)
{
g_print(" CLICK x = %f y = %f\n", x,y);
}
void end_event(GtkEventController *gesture,
gdouble x,
gdouble y,
gpointer user_data)
{
g_print(" RELEASE x = %f y = %f\n", x,y);
}
void activate (GtkApplication *app, gpointer data)
{
GtkWidget *window;
window =gtk_application_window_new(app);
gtk_widget_set_size_request(window,150,150);
GtkEventController *gesture_pos;
gesture_pos = gtk_event_controller_motion_new ();
gtk_widget_add_controller (window, (GtkEventController *)gesture_pos);
gtk_event_controller_set_propagation_phase((GtkEventController *)gesture_pos, GTK_PHASE_CAPTURE);
g_signal_connect (gesture_pos, "motion", G_CALLBACK (pointer_motion_event), window);
GtkGesture *gesture = gtk_gesture_click_new();
gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(gesture), 0);
gtk_widget_add_controller(window,(GTK_EVENT_CONTROLLER(gesture)));
g_signal_connect (gesture, "pressed", G_CALLBACK (click_event), NULL);
g_signal_connect (gesture,"released",G_CALLBACK(end_event),NULL);
gtk_widget_set_visible(window,TRUE);
}
祝你编程愉快。