GTK+图形化应用程序开发学习笔记(十六)—文件选择构件

本文介绍了如何使用GTK中的文件选择构件,包括创建文件选择构件、设置和获取文件名等关键操作。通过示例程序展示了从打开文件对话框到处理用户选择的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件选择构件(GtkFileSelect)是一种种快速、简单的显示文件对话框的方法。它带有“ 确定”、“取消”、“帮助”按钮,可以极大地减少编程时间。
       创建文件选择构件用函数gtk_file_selection_new.

1.
名称::
gtk_file_selection_new
功能:
创建文件选择构件
头文件:
#include 
函数原形:
GtkWidget *gtk_file_selection_new( gchar *title );
参数:
title  文件选择构件标题
返回值:
新的文件选择构件
       


要注意文件选择构件本身就是一个窗体,所以我们不需要也不能把它放入另外的一个窗体。通常情况下是用户点击某一按纽(如:打开文件)弹出该窗体,所以我们可以把创建文件构件的函数放在该按纽“clecked”信号的回调函数中。

2.
名称::
gtk_file_selection_set_filename 
功能:
设置文件名
头文件:
#include 
函数原形:
void gtk_file_selection_set_filename( GtkFileSelection *filesel, gchar *filename );
参数:
filesel        文件选择构件
filename      文件名
返回值:














gtk_file_selection_set_filename函数设置文件名,例如,要在打开时指向指定目录,或者给定一个缺省文件名。

下面给出创建文件选择构件的程序例子:
#include 

GtkWidget *FileSelection;
void button_event(GtkWidget *widget, gpointer *data);

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

gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOWTOPLEVEL);
gtk_widget_set_size_request(window,100,100);/*调整窗口大小*/
gtk_signal_connect(GTK_OBJECT(window),”destroy”,G_CALLBACK(gtk_main_quit),NULL);

button=gtk_button_new_with_label(“打开文件”);/*常见按纽*/
gtk_signal_connect(GTK_OBJECT(button),”clicked”,C_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_widget_show(FileSelection);
}
程序运行后会得到如下界面:

当用户点击按纽时会出现如下界面:


文件选择构件的结构如下:
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.
名称::
gtk_file_selection_get_filename
功能:
获取用户输入或选中的文件名
头文件:
#include 
函数原形:
gchar *gtk_file_selection_get_filename( GtkFileSelection *filesel );
参数:
filesel        文件选择构件
返回值:
文件名









gtk_file_selection_get_filename函数可以获得用户输入或选中的文件,我们通常需要在ok_button的”clicked”信号设置的回调函数中调用它。

下面我们利用上面所学的知识,编写一个程序。当用户选择文件,并点击打开按纽时打印文件名。
#include 

GtkWidget *FileSelection;
void OpenFile(GtkWidget *widget,gpointer *data);
void button_event(GtkWidget *widget, gpointer *data);

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

gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOWTOPLEVEL);
gtk_widget_set_size_request(window,100,100);/*调整窗口大小*/
gtk_signal_connect(GTK_OBJECT(window),”destroy”,G_CALLBACK(gtk_main_quit),NULL);

button=gtk_button_new_with_label(“打开文件”);/*常见按纽*/
gtk_signal_connect(GTK_OBJECT(button),”clicked”,C_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_FILL_SELECTION(FileSelection)->ok_button),”clicked”,GTK_SIGNAL_FUNC(OpenFile),NULL);/*捕捉打开按纽的”clicked”信号*/
gtk_widget_show(FileSelection);
}

void OpenFile(GtkWidget *widget,gpointer *data)
{
g_print(“%s\n”,gtk_file_selection_get_filename(GTK_FILE_SELECTION(FileSelection));
/*输出选择的文件名*/
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值