GTK+ 动态数组
GTK+ dynamic array
正如另一个 post 所建议的,我将提出新问题,更具体的问题。
GtkWidget *button[] /*to be a dynamic array */
void file_folder(GtkWidget *widget, gpointer data)
{
GtkWidget* dialog;
dialog = gtk_file_chooser_dialog_new("Choose a file", GTK_WINDOW(data),
GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_OK, GTK_RESPONSE_OK,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
gtk_widget_show_all(dialog);
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), "/home/demo/Downloads");
gint resp = gtk_dialog_run(GTK_DIALOG(dialog));
if(resp == GTK_RESPONSE_OK)
{
/*select file to execute*/
g_print("Success\n");
gtk_widget_destroy(dialog);
}
else
{
gtk_widget_destroy(dialog);
}
}
如何执行选定的文件
以及如何创建包含以下内容的动态数组:
应用程序名称、应用程序图标和可执行文件(假设我在 ubuntu 上开发)。
首先使用gtk_file_chooser_get_filename()
获取所选文件的文件名。
gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
获取文件的文件名后,可以参考this answer,使用fork()
和execv()
执行文件
至于你的动态数组,你需要使用自定义结构的数组。例如:
struct my_button {
const char *app_name;
GtkWidget *app_icon;
const char *exec_path;
}
然后就可以创建struct my_button
的动态数组了。你可以自己实现这个,我相信你可以在网上找到很多教程。或者,您可以使用 GLib(GTK+ 使用),它提供了许多您可以使用的动态数据结构,例如G阵列。示例:
struct my_button *b = malloc(sizeof *b);
b->app_name = "whatever"; // etc
GArray *arr = g_array_new(TRUE, TRUE, sizeof *b);
g_array_append_vals(arr, b, 1);
记得在使用后释放已用内存。
关于 GArray 的更多详细信息,请参阅 documentation。
我找到了我的解决方案!
execl("/usr/bin/xdg-open", "xdg-open", filename, (char *)0);
exit(1);
完成任务。
正如另一个 post 所建议的,我将提出新问题,更具体的问题。
GtkWidget *button[] /*to be a dynamic array */
void file_folder(GtkWidget *widget, gpointer data)
{
GtkWidget* dialog;
dialog = gtk_file_chooser_dialog_new("Choose a file", GTK_WINDOW(data),
GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_OK, GTK_RESPONSE_OK,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
gtk_widget_show_all(dialog);
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), "/home/demo/Downloads");
gint resp = gtk_dialog_run(GTK_DIALOG(dialog));
if(resp == GTK_RESPONSE_OK)
{
/*select file to execute*/
g_print("Success\n");
gtk_widget_destroy(dialog);
}
else
{
gtk_widget_destroy(dialog);
}
}
如何执行选定的文件
以及如何创建包含以下内容的动态数组:
应用程序名称、应用程序图标和可执行文件(假设我在 ubuntu 上开发)。
首先使用gtk_file_chooser_get_filename()
获取所选文件的文件名。
gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
获取文件的文件名后,可以参考this answer,使用fork()
和execv()
执行文件
至于你的动态数组,你需要使用自定义结构的数组。例如:
struct my_button {
const char *app_name;
GtkWidget *app_icon;
const char *exec_path;
}
然后就可以创建struct my_button
的动态数组了。你可以自己实现这个,我相信你可以在网上找到很多教程。或者,您可以使用 GLib(GTK+ 使用),它提供了许多您可以使用的动态数据结构,例如G阵列。示例:
struct my_button *b = malloc(sizeof *b);
b->app_name = "whatever"; // etc
GArray *arr = g_array_new(TRUE, TRUE, sizeof *b);
g_array_append_vals(arr, b, 1);
记得在使用后释放已用内存。
关于 GArray 的更多详细信息,请参阅 documentation。
我找到了我的解决方案!
execl("/usr/bin/xdg-open", "xdg-open", filename, (char *)0);
exit(1);
完成任务。