여기 내 첫 번째 게시물입니다. 우선 나는 가난한 영어에 대해 사과하고 싶다. 나는 정말로 내가 당신이 말하는 것을 이해할 수 있기를 바랍니다.이미지가있는 버튼 - 이미지가 사라집니다.
이 좋아, 그래서 내 문제가있다 :
int board = 4;
int board_2 = board*board;
GtkWidget *card_button[board_2];
char path[100];
sprintf(path,"res/0.png"); //path to default image
GtkWidget *button_image = gtk_image_new_from_file(path);
for(int i=0; i<board_2; i++)
{
card_button[i] = gtk_button_new();
gtk_button_set_image(card_button[i],button_image);
gtk_grid_attach(GTK_GRID(grid),card_button[i],i%board,(i/board)+1,1,1);
g_signal_connect(G_OBJECT(card_button[i]), "clicked", G_CALLBACK(game_engine), i);
}
game_engine 기능 :
void game_engine(GtkWidget* widget, gpointer data)
{
int button_id = (int)data;
char path[30];
sprintf(path,"res/%d.png",button_id);
GtkWidget *button_image = gtk_image_new_from_file(path);
gtk_button_set_image(widget, button_image);
}
내가 버튼을 클릭
이 모든 것이 괜찮을 것 (이미지 나 루프에서 생성 된 몇 가지 버튼이 단추에 보여주기), 때로는 클릭 한 단추에 이미지를 표시하는 것 외에도 다른 이미지가 사라집니다. 또한 GTK는 콘솔에 오류가 다음 보여줍니다 :(Program.exe:4920): Gtk-CRITICAL **: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed
을 좀 debbuging을했고,이 오류가 game_engine 기능에 gtk_button_set_image에 의해 발생되는 것을 발견했다. 나는 다음에해야할 일을 모른다. 도움을 위해 미리 감사드립니다. 당신의 라인 당신이이 GtkWidget * 위젯을 사용하는
gtk_button_set_image(widget, button_image);
을에 따라서
'i'의 값이 '이 GtkWidget * card_button [I]의 시점에서 무엇;'은? 나는'i'가'board_2'이어야한다고 생각합니다. – unwind
맞습니다 - 오타입니다. 내 소스 파일에서 올바르게'GtkWidget * card_button [board_2];로 선언해야한다. – SirPL