2014-03-04 1 views
1

GTK + 프로그램에서 gtkButton으로 일부 색상을 넣으 려하지만 위에서 지정한대로 일부 선언 오류가 표시됩니다. 이것은 gtk 프로그램에서 사용한 선언입니다.오류 : 예상 선언 지정자 또는 '...'문자열 상수 앞에 gtk + color 내에서 선언 할 때

static GdkColor colorRed;//error line 1 
gdk_color_parse("red", &colorRed); //error line 2 

button1 = gtk_button_new_with_label("button"); 
gtk_widget_modify_base (button1, GTK_STATE_NORMAL, &colorRed); 

하지만 오류

error: expected declaration specifiers or ‘...’ before string constant //line 1 
error: expected declaration specifiers or ‘...’ before ‘&’ token  //line 2 

답변

0

버튼 색상을 지정하는 선언은 정확했지만 여러 함수에서 색상을 사용하려면 main() 함수 외부에서 전역으로 선언했습니다. 그래서, 내가 main() 함수에 선언을 넣고 gtk_widget_modify_base()를 gtk_widget_modify_bg()로 바꾸면 완벽하게 작동합니다. 여기

코드

#include <gtk/gtk.h> 
static void destroy (GtkWidget *window, gpointer data); 
GtkWidget *window; 
GtkWidget *table; 
GtkWidget *button; 
GtkWidget *button1[20][20]; 
GtkWidget *button2; 
GtkWidget *button3; 
GtkWidget *title; 
GtkWidget *label; 
static char *values[100] = 
{ "127.0.0.1", "Idle", 
"192.168.73.129", "Idle", 
"192.168.73.130", "Idle", 
"192.168.73.131", "Idle", 
"192.168.73.132", "Idle", 
"192.168.73.133", "Idle", 
"192.168.73.134", "Idle", 
}; 
int main(int argc, char *argv[]) 
{ gtk_init(&argc, &argv); 
window = gtk_window_new(GTK_WINDOW_TOPLEVEL); //gtk_scrolled_window_new(NULL, NULL); 
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); 
gtk_window_set_default_size(GTK_WINDOW(window), 550, 700); 
gtk_window_set_title(GTK_WINDOW(window), "Client Activity Monitor"); 
gtk_container_set_border_width(GTK_CONTAINER(window), 25); 
g_signal_connect (G_OBJECT (window), "destroy",G_CALLBACK (destroy), NULL); 
table = gtk_table_new(4, 2, TRUE); 
gtk_table_set_row_spacings(GTK_TABLE(table), 2); 
gtk_table_set_col_spacings(GTK_TABLE(table), 2); 

GdkColor colorRed;//color declaration 
gdk_color_parse("red", &colorRed);//color assignment 

int i = 0; 
int j = 0; 
int pos = 0; 

title = gtk_frame_new("Client Logs"); 
label = gtk_label_new("server: waiting for connections...\n"); 
gtk_frame_set_shadow_type(GTK_FRAME(title), GTK_SHADOW_IN); 
gtk_table_attach_defaults(GTK_TABLE(table), title, 0, 1, 0, 1); 
button3 = gtk_button_new_with_label("Start Server"); 
gtk_widget_modify_fg(button3, GTK_STATE_NORMAL, &colorRed);//color use 
gtk_table_attach_defaults(GTK_TABLE(table), button3, 1, 2, 0, 1); 

gtk_container_add (GTK_CONTAINER (title), label); 
gtk_widget_show_all(title); 

for(i=0; i < 6; i++) { 
for(j=0; j < 2; j++) { 
    button1[i][j] = gtk_button_new_with_label(values[pos]); 
    gtk_widget_modify_fg(button1[i][j], GTK_STATE_NORMAL, &colorRed); 
    gtk_table_attach_defaults(GTK_TABLE(table), button1[i][j], j, j+1, i+1, i+1+1); 
    pos++; 
} 
} 
gtk_container_add(GTK_CONTAINER(window), table); 
g_signal_connect_swapped (G_OBJECT (button3), "clicked",G_CALLBACK (destroy),(gpointer) window); 
gtk_widget_show_all(window); 
gtk_main(); 
return 0; 
} 
static void destroy (GtkWidget *window, gpointer data) 
{ 
gtk_main_quit(); 
} 
를 보정
1

gtk_widget_modify_base 3.0부터 사용되지 않습니다 표시합니다. 대신 gtk_widget_override_background_color을 사용하십시오. 당신은 GdkColor, 단지 GdkRGBA을 필요로하지 않을 것입니다. 어쨌든 카이로에게 더 편리합니다.

오류 정보 : 나는 잘못된 부분에 초점을 맞추고 있다고 생각합니다. 코드 조각은 컴파일러가 오류를 보는 곳입니다.하지만 앞에 오는 줄은 항상 환영합니다. 여러분의 문제는 여러분이 GdkColor에 대한 헤더를 포함하지 않는다고 생각하는 것입니다.

관련 문제