How To Save Content of GTKTextBuffer to a File

南笙酒味 提交于 2020-01-02 04:54:11

问题


I'm writing on Ubuntu 12.04 in Anjuta with C and GTK a program. It's a graphical interface for the nbc (Lego NXT Compiler). I have a GTKTextView. Now I want to save the content of the textview to a file, which could be chosen by a GTKFileChooser. Now I don't know how to get the text from the TextView and write it to the file. How do i do this?


回答1:


First, get the GtkTextBuffer from the GtkTextView using gtk_text_view_get_buffer(). Then get the start and end GtkTextIters from the buffer to use to get the text of the buffer. Finally, write that text to the file using the API of your choice, however, I would recommend Gio. Here's a snippet from my old tutorial:

gtk_widget_set_sensitive (text_view, FALSE);
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (editor->text_view));
gtk_text_buffer_get_start_iter (buffer, &start);
gtk_text_buffer_get_end_iter (buffer, &end);
text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);       
gtk_text_buffer_set_modified (buffer, FALSE);
gtk_widget_set_sensitive (editor->text_view, TRUE);

/* set the contents of the file to the text from the buffer */
if (filename != NULL)        
    result = g_file_set_contents (filename, text, -1, &err);
else
    result = g_file_set_contents (editor->filename, text, -1, &err);

if (result == FALSE)
{
    /* error saving file, show message to user */
    error_message (err->message);
    g_error_free (err);
}        

g_free (text); 

Check out the following API documentation:

  1. http://developer.gnome.org/gtk3/stable/GtkTextBuffer.html
  2. http://developer.gnome.org/glib/stable/glib-File-Utilities.html



回答2:


void on_toolbutton3_clicked(GtkToolButton *toolbutton, gpointer data)
{   


    GtkWidget *dialog;
    dialog = gtk_file_chooser_dialog_new ("Abspeichern...",
                      NULL,
                      GTK_FILE_CHOOSER_ACTION_SAVE,
                      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                      GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
                      NULL);
    if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
    {
    char *filename;
    char *text;
    GtkTextIter *start;
    GtkTextIter *end;
    gboolean result;
    GError *err;
    filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
    gtk_widget_set_sensitive (data, FALSE);
    savebuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (data));
gtk_text_buffer_get_start_iter (savebuffer, &start);
gtk_text_buffer_get_end_iter (savebuffer, &end);
text = gtk_text_buffer_get_text (savebuffer, &start, &end, FALSE);       
gtk_text_buffer_set_modified (savebuffer, FALSE);
gtk_widget_set_sensitive (data, TRUE);

/* set the contents of the file to the text from the buffer */
if (filename != NULL)        
    result = g_file_set_contents (filename, text, -1, &err);
else
    result = g_file_set_contents (filename, text, -1, &err);

if (result == FALSE)
{
    /* error saving file, show message to user */

}        

g_free (text); 
    }
    gtk_widget_destroy (dialog);

}

data points on textview1.



来源:https://stackoverflow.com/questions/11088338/how-to-save-content-of-gtktextbuffer-to-a-file

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!