easy教程Gtk+之关于文件选择构建(2)

来源:互联网 发布:新开淘宝小店如何推广 编辑:程序博客网 时间:2024/05/16 09:30

文件选择构建(GtkFileSelect)是一种快速简单的显示文件对话框的方法,带有‘确定’,‘取消’,‘帮助’按钮,可以极大地减少编程时间。
1, 创建文件选择构建
GtkWidget *gtk_file_selection_new(gchar *title);
注意文件选择构建本身就是一个窗体,所以不需要也不能把它放入另外的窗体。一般放入回调内,对某事件响应弹出文件选择构件。
2, 设置文件名
void gtk_file_selection_filename(GtkFileSelection *filesel,gchar *filename);

文件选择构件的结构如下:
typedef struct {
  GtkWidget *dir_list;
  GtkWidget *file_list;
  GtkWidget *selection_entry;
  GtkWidget *selection_text;
  GtkWidget *main_vbox;
  GtkWidget *ok_button;
  GtkWidget *cancel_button;
  GtkWidget *help_button;
  GtkWidget *history_pulldown;
  GtkWidget *history_menu;
  GList     *history_list;
  GtkWidget *fileop_dialog;
  GtkWidget *fileop_entry;
  gchar     *fileop_file;
  gpointer   cmpl_state;
 
  GtkWidget *fileop_c_dir;
  GtkWidget *fileop_del_file;
  GtkWidget *fileop_ren_file;
 
  GtkWidget *button_area;
  GtkWidget *action_area;
} GtkFileSelection;

在为文件选择构建的信号设置回调函数时,可能用到ok_button,cancel_button两个指针。例如打开一个文件,我们需要对ok_button的clicked信号设置回调函数使他连接打开文件的函数。也可以添加删除修改一些内部控件。

3, 获取用户输入或选中的文件名
Gchar* gtk_file_selection_get_filename(GtkFileSelection *filesel);
该函数可以返回用户输入或者选中的文件。通常我们需要在ok_button的clicked事件回调内调用它。

下面看一个简单的demo

GtkWIdget *FileSelectio;
void OpenFIle(GtkWIdget *widget,gpointer *data);
void button_event(GtkWIdte *widget,gpointer *data);

Int main(int agrc,char *argv[])
{
   GtkWidget *window;
   GtkWidget *button;

   Gtk_init(&argc,&argv);
  
   window = gtk_window_new(GTK_WINDOWTOLEVEL);
   gtk_widget_set_size_request(window,100,100);//调整窗体大小
   gtk_signal_connect(GTK_OBJECT(window),”destroy”,G_CALLBACK(gtk_main_quit),NULL);

   button = gtl_button_new_with_label(“打开文件”);
   gtk_signal_connect(GTK_OBJECT(button),”clicked”,G_CALLBACK(button_event),NULL);
   gtk_container_add(GTK_CONTAINER(window),button);
 
   gtk_widget_show(button);
   gtk_widget_show(window);
gtk_main();
}

Void button_event(GtkWidget *widget ,gpointer *data)
{
   FileSelection = gtk_file_selection_new(“选择文件”);//创建文件选择构件
   gtk_file_selection_set_filename(GTK_FILE_SELECTION(FileSelection),”*.txt”);
   gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(FIleSelection)->ok_button),”clicked”,GTK_SLGNAL_FUNC(OpenFIle),NULL);
   gtk_widget_show(FIleSelection);
}

Void OpenFile(GtkWidget *widget,gpointer *data)
{
G_print(“%s\n”,gtk_file_selection_get_filename(GTK_FILE_SELECTION(FileSelection)));//输入要选择的文件名
}

 

原创粉丝点击