[英]GTK+ dynamic array
正如其他帖子所建議的那樣,我會問一個新問題,更具體的一個問題。
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));
獲取文件的文件名后,您可以參考此答案並使用fork()
和execv()
執行文件。
至於動態數組,您需要使用自定義結構的數組。 例如:
struct my_button {
const char *app_name;
GtkWidget *app_icon;
const char *exec_path;
}
然后,您可以創建struct my_button
的動態數組。 您可以自己實現此功能,我相信您可以在線找到許多教程。 或者,您可以使用GLib(GTK +會使用),它提供了許多可以使用的動態數據結構,例如GArray。 例:
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的更多詳細信息,請參考文檔 。
我找到了解決方案!
execl("/usr/bin/xdg-open", "xdg-open", filename, (char *)0);
exit(1);
做好了
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.