簡體   English   中英

將Gtk小部件的結構傳遞給回調函數

[英]Passing a struct of Gtk Widgets to a callback function

我正在C語言中創建一個GTK +應用程序,在這里我需要從回調函數中銷毀一個小部件(例如:按鈕)。當我從該函數調用“ gtk_widget_destroy”時,該小部件不會被銷毀,並且我看到以下警告:

(gtkTest:9150): GLib-GObject-WARNING **: invalid uninstantiatable type 'GInterface' in cast to 'GtkObject'

(gtkTest:9150): Gtk-CRITICAL **: IA__gtk_widget_destroy: assertion 'GTK_IS_WIDGET (widget)' failed

如何從回調函數內部訪問按鈕小部件? 我看到的唯一我的選擇是使此小部件成為全局小部件。任何幫助將不勝感激。

代碼片段如下:

typedef struct {
    GtkWidget *button;
} buttonInfo;


/*call back function */
static gpointer _callBackFunc (buttonInfo *buttonTable)
{
    /*do some stuff*/
    gtk_widget_destroy(buttonTable->button);
    //
    return(NULL);
}

/*main*/
int main( int argc, char *argv[])
{

    GtkWidget *testButton;

    buttonInfo *buttonPTR;
    buttonPTR = g_new(buttonInfo,1);
    testButton = gtk_button_new_with_label("Click Me");
    buttonPTR->button = (GtkWidget *) testButton;

    g_signal_connect(G_OBJECT(testButton),"activate",
                     G_CALLBACK(_callBackFunc),buttonPTR);
    /*This works */
    //gtk_destroy_widget(buttonPTR->button);
} 

您的回調函數簽名必須與您在信號文檔中看到的簽名匹配。 在“激活”的情況下,應該

static void _callBackFunc (GtkButton *button, gpointer user_data)
{
    buttonInfo *button_info = (buttonInfo *)user_data;

    // ...
}

也就是說,在檢查簽名時,請閱讀激活信號文檔的其余部分:這可能不是您要使用的信號(請參見“單擊”)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM