我有以下数组:

GtkWidget*GtkEntrys[3];


它正在创建中,等等,现在我想传递它的功能,所以我这样做:

g_signal_connect(G_OBJECT(Buttons[0]),"clicked",G_CALLBACK(CreateProfile),EntryBoxes);

void CreateProfile(GtkWidget* widget, gpointer**data)
{
    if (gtk_entry_get_text_length(GTK_ENTRY(data[0]))== 0) std::cout << "Empty" << std::endl;
}


但是我遇到了错误:GTK_IS_ENTRY FAILED

最佳答案

我认为

 g_signal_connect(G_OBJECT(Buttons[0]),"clicked",G_CALLBACK(CreateProfile),EntryBoxes);


EntryBoxes实际上是之前定义的GtkEntrys。您传递的内容不是指向数组的指针,而是指向第一个数组元素的指针。因此,您必须将gpointer转换为指向此类元素的指针,即为GtkEntry*(而非GtkEntry**

void CreateProfile(GtkWidget* widget, gpointer data) {
    GtkEntry* entries = (GtkEntry*) data;
    if (gtk_entry_get_text_length(GTK_ENTRY(entries[0]))== 0)
        do_something();
}

关于c - 将指针数组传递给与GTK相关的功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5754323/

10-12 00:21