我正在遵循名為C 和 GUI 編程簡介(鏈接)的官方 Raspberry Pi 書籍的說明。
它使用 GTK2 在 C 中創建一個 gui。
我在嘗試應該保存檔案的代碼時遇到了一些問題。這里是本書的代碼(我使用的相同):
#include <gtk/gtk.h>
static void save_file (GtkWidget *btn, gpointer ptr)
{
GtkWidget *sch = gtk_file_chooser_dialog_new ("Save file", GTK_WINDOW (ptr), GTK_FILE_CHOOSER_ACTION_SAVE, "Cancel", 0, "OK", 1, NULL);
if (gtk_dialog_run (GTK_DIALOG (sch)) == 1)
{
printf ("%s selected\n", gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (sch)));
}
gtk_widget_destroy (sch);
}
void end_program (GtkWidget *wid, gpointer ptr)
{
gtk_main_quit ();
}
int main (int argc, char * argv[])
{
gtk_init (&argc, &argv);
GtkWidget *win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
GtkWidget *btn = gtk_button_new_with_label ("Close window");
g_signal_connect (btn, "clicked", G_CALLBACK (end_program), NULL);
g_signal_connect (win, "delete_event", G_CALLBACK (end_program), NULL);
GtkWidget *vbox = gtk_vbox_new (FALSE, 5);
gtk_container_add (GTK_CONTAINER (win), box);
GtkWidget *fc_btn = gtk_button_new_with_label ("Save file");
g_signal_connect (fc_btn, "clicked", G_CALLBACK (save_file), win);
gtk_box_pack_start (GTK_BOX (vbox), fc_btn, TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (vbox), btn, TRUE, TRUE, 0);
gtk_widget_show_all (win);
gtk_main ();
return 0;
}
書上說這個程式應該打開一個帶有按鈕的視窗,如果單擊該按鈕,則會打開一個新視窗,我可以在其中插入檔案的名稱,然后單擊“確定”我應該能夠保存它。
生成的檔案路徑在終端內正確列印。
如果我在保存檔案的路徑中輸入,則該檔案不存在!它沒有隱藏,也沒有以不同的名稱保存。
這段代碼中是否缺少某些內容?
uj5u.com熱心網友回復:
我在上面給你留下了評論。如前所述,我在您的鏈接中查看了本書 PDF 版本中的示例代碼。該代碼的目的是顯示一個檔案選擇器對話框小部件,并通過在控制臺中列印完整路徑來確認您選擇或輸入的檔案的名稱。照原樣,該程式沒有將檔案實際寫入存盤介質的機制。這就是為什么當您查看系統上的檔案夾時看不到檔案的原因。如果您至少想要一個實際撰寫的檔案,則需要添加更多代碼。只是為了給您一個非常簡單的示例來說明它的外觀,我對示例程式中的“save_file”函式進行了修改,如以下代碼片段中所述。
static void save_file (GtkWidget *btn, gpointer ptr)
{
GtkWidget *sch = gtk_file_chooser_dialog_new ("Save file", GTK_WINDOW (ptr), GTK_FILE_CHOOSER_ACTION_SAVE, "Cancel", 0, "OK", 1, NULL);
if (gtk_dialog_run (GTK_DIALOG (sch)) == 1)
{
printf ("%s selected\n", gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (sch)));
char cmd[1024];
strcpy(cmd, "touch ");
strcat(cmd, gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (sch)));
system(cmd);
}
gtk_widget_destroy (sch);
}
僅供參考,我使用“touch”命令在 Linux 系統上構建了這個修改后的程式,該命令將更新現有檔案的時間戳或創建一個新的空檔案,以及“system”命令,該命令允許一個人執行程式,就好像一個人正在使用終端。你提到了一個 Raspberry Pi 系統,我相信它使用 Linux 或類似 Linux 的作業系統,所以這些命令應該可以作業。
如需更多示例和教程,您可能需要查看網路上的一些視頻。以下鏈接不是具體推薦,但它是我在網上找到的首批視頻之一,其中介紹了使用 GTK 進行 C 編碼的各個步驟,包括對 GTK 檔案選擇器對話框的參考。
“https://www.youtube.com/watch?v=EdJVkr87LSk&list=PLMkSWKN9VsZH562FmV8sMvMu_sVZsYAt6”
您可能想查看這些視頻,看看它們是否對您有幫助。
我希望這能為你澄清事情。
問候。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/470192.html
上一篇:Node.js 中的行程和執行緒