【问题标题】:Gtk button-press-event on a Label标签上的 Gtk 按钮按下事件
【发布时间】:2021-04-11 03:43:28
【问题描述】:

是否可以在 GtkLabel 上使用信号button-press-event?我尝试注册一个信号,但什么也没发生,我该怎么做才能让它工作?

【问题讨论】:

  • 如果你把你的(假设的)弟弟送到面包店买一个袖珍计算器......你期望得到什么?如果相应地为某个小部件注册信号处理程序是无用的。小部件不会发出此信号。我想知道这甚至是可能的。我假设您以某种方式滥用了强制转换或 GTK+ 的通用 API(用 C 实现)。其他小部件集的 API(在 C++ 中实现)从一开始就更可靠地防止此类事情发生。仅供参考:GTK+ 3: Label - Signals
  • @ritsi:如果你描述你的问题的方式很清楚你想要达到的目标,而不是试图硬塞一些你试图弄清楚的方法,那么其他人可以更好地帮助你。根据您的用例,还有多种其他/更好的解决方案:-)
  • @Scheff 检查员(当我按 ctrl-shif-i 时)说按钮按下事件 连接在标签上

标签: c gtk gtk3


【解决方案1】:

您可能需要一个事件框,如果不需要,那么您确实需要为此提供代码。

这是一个演示:

#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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
相关资源
最近更新 更多