簡體   English   中英

GTK +動態數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM