c - 标签上的 Gtk 按钮按下事件
问题描述
button-press-event
是否可以在 GtkLabel 上使用信号?我试图注册一个信号,但什么也没发生,那么我该怎么做才能让它工作呢?
解决方案
您可能需要一个事件框,如果不需要,那么您确实需要为此提供代码。
这是一个演示:
#include <gtk/gtk.h>
static gboolean button_press_event_clbk ( GtkWidget *widget, GdkEvent *event )
{
g_return_val_if_fail ( GTK_IS_LABEL ( widget ), FALSE );
switch ( event->type )
{
case GDK_BUTTON_PRESS :
printf ( "The Button was Pressed\n" );
return TRUE;
case GDK_BUTTON_RELEASE :
printf ( "\tThe Button was Released\n" );
return TRUE;
default:
return FALSE;
}
return FALSE;
}
int main ( void )
{
/// ***
GtkWidget *window;
GtkWidget *label;
GtkWidget *event_box;
/// ***
gtk_init ( NULL, NULL );
/// *** create a new window
window = gtk_window_new ( GTK_WINDOW_TOPLEVEL );
gtk_window_set_default_size ( GTK_WINDOW ( window ), 200, 200 );
g_signal_connect ( window, "delete-event", G_CALLBACK ( gtk_main_quit ), NULL );
/// ***
event_box = gtk_event_box_new();
gtk_container_add ( GTK_CONTAINER ( window ), event_box );
/// *** Create the label
label = gtk_label_new ( "Click here" );
gtk_container_add ( GTK_CONTAINER ( event_box ), label );
/// ***
g_signal_connect_swapped ( event_box, "button-press-event", G_CALLBACK ( button_press_event_clbk ), label );
g_signal_connect_swapped ( event_box, "button-release-event", G_CALLBACK ( button_press_event_clbk ), label );
/// ***
gtk_widget_show_all ( window );
/// ***
gtk_main ();
}
输出:
The Button was Pressed
The Button was Released
推荐阅读
- css - 如何在 CSS3 中响应式地将项目与 Flexbox 对齐?
- python - 我想用 django 制作一个自定义作者模型,但我不能这样做:(
- python-3.x - 我在哪里可以找到 NLTK 源 + 安装?
- c++ - 为什么这个程序崩溃并返回大值?
- html - 将计数器重置为零,并且当 jQuery 中的按钮更改时应该从零重新开始
- jquery - 合并来自 2 个 jQuery 片段的功能
- javascript - 具有唯一属性的 TypeScript 对象集
- flutterwebviewplugin - webview_flutter 无法隐藏/更改某些元素
- amazon-web-services - 获取“请求中包含的安全令牌无效。” 尝试获取 s3 的预签名 URL 时
- azure-devops - 管理 Azure DevOps BurnDown