2

GTKは初めてで、CでUIを作成するために使用しています。スプラッシュ画面を作成し、関数を使用して指定した秒後に閉じることができますg_timeout_add(100, function_to_call, NULL);。スプラッシュ画面はうまく機能します。しかし、問題は、プログラムをさらに拡張する場合です(つまり、スプラッシュ画面を閉じた後、別のウィンドウを自動的に表示したいのですが、そうはなりません。両方のウィンドウが一緒に開きます。これが私のプログラムです。

gboolean function_to_call(gpointer data){
    gtk_quit_main();
    return(FALSE);
}
int main (int argc, char *argv[]){
    GtkWidget *window, *image, *another_window;
    gtk_init(&argc, &argv);
    .
    .
    .
    .
    .
    .
    .
    g_timeout_add (100, function_to_call, NULL);
    gtk_main ();
    /*if my program is till this, splash screen closes after 1 sec . But when i try
     *to define another window from here onwards and call gtk_widget_show() and gtk_main() 
     *again for another_ window, window and another_window both open together and window  
     *doesn't close after 1 sec. */
}

どんな種類の助けも認められます。
ありがとうございました。

4

2 に答える 2

7

function_to_callはここでスプラッシュウィンドウを閉じません。gtk_mainイベントループを終了します。イベントループを終了する必要はありません。

代わりに、で実行したいのはfunction_to_call、スプラッシュウィンドウを非表示(または破棄)して、次のウィンドウ(gtk_widget_hide()gtk_widget_show())を表示することです。

于 2012-11-05T20:40:52.307 に答える
2

以下に示すスプラッシュスクリーンヘッダーファイルを作成しました。

#include <gtk/gtk.h>

/* Close the splash screen */
gboolean close_screen(gpointer data)
{
  gtk_widget_destroy((GtkWidget*)data);
  gtk_main_quit ();
  return(FALSE);
}


int Show_Splash_Screen(char* image_name,int time,int width,int height)
{
  GtkWidget  *image, *window;
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_widget_set_size_request (window, width, height);
  gtk_window_set_decorated(GTK_WINDOW (window), FALSE);
  gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER_ALWAYS);
  gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
  image=gtk_image_new_from_file(image_name);
  gtk_container_add(GTK_CONTAINER(window), image);
  gtk_widget_show_all (window);
  g_timeout_add (time, close_screen, window);
  gtk_main ();
  return 0;
}

このファイルを含めて、スプラッシュ画面を表示するには、関数Show_Splash_Screen( "image_path"、time_in_seconds、width_of_image_in_pixels、height_of_image_in_pixels);を呼び出します。

于 2012-12-16T13:47:42.063 に答える