我有以下数组:
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/