gtk设计简单的文本编辑器(2)

完成上图红色的功能

首先是glade的设计:

功能说明:

在textview中编辑好文本后,在文件名输入栏输入文件名按回车就可以在指定的路径下保存文件了。

首先是获取textview中的内容,用到的函数是gtk_text_view_get_buffer,就可以得到一个文本缓冲区,用来对文本进行操作,包括插入、删除、更改字体颜色大小等。写入文件要有一个路径比方

char path[100] = "C:\\Users\\liuxi_001\\Desktop\\";

在定义一个变量用来保存文件名,就是entry2输入的文件名 gchar *fileName,这样用函数strcat连接起来就完成了整个的路径 fpath = strcat(path, fileName)。

要用到一个signal就是entry中的activate信号,它是你按回车就会被激活,执行回调函数。entry3和entry4设计成不可编写,只能显示不能更改。

具体看代码:

#include <stdlib.h>
#include <gtk/gtk.h>

/*统计字符数*/
void charsize(GtkWidget *textbuff, GtkWidget *entry4)
{
    int charsize ;
    char ccharsize[4];

    charsize =  gtk_text_buffer_get_char_count (GTK_TEXT_BUFFER(textbuff));
    itoa(charsize, ccharsize, 10);
    gtk_entry_set_text (GTK_ENTRY(entry4), ccharsize);
}
/*统计行数*/
void linesize(GtkWidget *textbuff, GtkWidget *entry3)
{
    int linesize ;
    char clinesize[4];

    linesize =  gtk_text_buffer_get_line_count (GTK_TEXT_BUFFER(textbuff));
    itoa(linesize, clinesize, 10);
    gtk_entry_set_text (GTK_ENTRY(entry3), clinesize);
}
/*保存功能*/
void saveFile(GtkWidget *entry2, GtkWidget *textview)
{
    FILE *fp;
    gchar *fpath;
    gchar *text;
    GtkTextIter start, end;
    GtkTextBuffer *textbuff;
    gchar *fileName;

    char path[100] = "C:\\Users\\liuxi_001\\Desktop\\";
    fileName= gtk_entry_get_text(GTK_ENTRY(entry2));
    fpath = strcat(path, fileName);
    fp = fopen(fpath, "wb");
    textbuff = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
    gtk_text_buffer_get_bounds(textbuff, &start, &end);
    text = gtk_text_buffer_get_text(textbuff, &start, &end, TRUE);
    fputs(text, fp);
    fclose(fp);
}

int main (int argc, char *argv[])
{
    GtkWidget *win;
    GtkBuilder *builder;
    GtkWidget *entry2;
    GtkWidget *entry3;
    GtkWidget *entry4;
    GtkWidget *textview1;

    
    /*这些是固定格式*/
    gtk_init (&argc, &argv);
    builder = gtk_builder_new ();
    gtk_builder_add_from_file (builder, "test.glade", NULL);
    gtk_builder_connect_signals (builder, NULL);
    /*从test.glade文件中获得window1,注意其他的组建也可以按这个格式获得*/
    win = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
    entry2 = GTK_WIDGET (gtk_builder_get_object (builder, "entry2"));
    textview1 = GTK_WIDGET (gtk_builder_get_object (builder, "textview1"));
    /*保存回调信号*/
    g_signal_connect(entry2, "activate", G_CALLBACK(saveFile), textview1);
    /*统计行数信号*/
    g_signal_connect(textbuff, "changed", G_CALLBACK(linesize), entry3);
    /*统计字符数信号*/
    g_signal_connect(textbuff, "changed", G_CALLBACK(charsize), entry4);
    
    g_object_unref (G_OBJECT (builder));
    gtk_widget_show (win);
    gtk_main ();
    return 0;
}





转载于:https://my.oschina.net/liuxinquan/blog/479935

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值