GTK构件 --- 文本视图控件GTKtextview

文本视图控件(gtktextview)是用以取代原有的文本编辑(gtktext)控件的,它包括一个文本缓冲区(gtktextbuffer),用来保存文本控件显示的带有标记性的文字,且一个缓冲区支持多个显示;缓冲区文本的迭代(gtktextiter),用来替代缓冲区的某一位置(首部、尾部、某一行等),以便向其中插入数据或控件;缓冲区的书签(gtktextmark),表示缓冲区中的某一具体位置,以便进行滚动操作;缓冲区的文本标记(gtktexttag),可以应用到缓冲区中文本的属性标记(如本例中的蓝色前景,居中等);缓冲区的标记表(gtktexttagtable)联合多种文本属性标记一起使用。
      当文本视图缓冲区(gtktextbuffer)光标发生变化时将触发mark_set信号。
1.相关接口函数/*创建文本视图*/gtkwidget*gtk_text_view_new (void)/*获取文本视图缓冲区*/gtktextbuffer*gtk_text_view_get_buffer (gtktextview *text_view)/*获取缓冲区文本的起始位置和结束位置,start、end定义gtktextiter 变量取地址传入即可*/void gtk_text_buffer_get_bounds (gtktextbuffer *buffer,gtktextiter *start,gtktextiter *end)/*像缓冲区插入数据*/void gtk_text_buffer_insert (gtktextbuffer *buffer,gtktextiter *iter,const gchar *text,gint len)形参:buffer --文本缓冲区 iter --插入数据位置,gtk_text_buffer_get_bounds获取的的位置 text --插入内容 len --插入的内容长度,填-1表示插入整个text/*获取缓冲区的起始位置*/void gtk_text_buffer_get_start_iter (gtktextbuffer *buffer,gtktextiter *iter)/*获取缓冲区的结束位置*/void gtk_text_buffer_get_end_iter (gtktextbuffer *buffer,gtktextiter *iter)/*获取缓冲区的行数*/gint gtk_text_iter_get_line (const gtktextiter *iter)/*获取缓冲区列数*/gint gtk_text_iter_get_line_offset (const gtktextiter *iter)/*删除缓冲区中的内容,end填-1表示从start到缓冲区结束*/gtk_text_buffer_delete (gtktextbuffer *buffer,gtktextiter *start,gtktextiter *end)/*获取字符数*/gint gtk_text_buffer_get_char_count (gtktextbuffer *buffer) 2.文本视图构件示例#include #include gtktextbuffer *textbuffer;gtkwidget*status;guint statusbar_flag;void text_callback(gtkwidget *widget,gpointer data){ gtktextiter end; gtk_text_buffer_get_end_iter (textbuffer,&end); gint row = gtk_text_iter_get_line(&end); gint col = gtk_text_iter_get_line_offset(&end); int count=gtk_text_buffer_get_char_count(textbuffer); g_print(文本行:%dt文本列:%dt字数:%dn,row,col,count); gchar buff[100]; snprintf(buff,sizeof(buff),行:%dt列:%dt字数:%d,row+1,col+1,count); gtk_statusbar_push (gtk_statusbar (status),statusbar_flag,buff);} int main(int argc,char *argv[]){ gtkwidget *window; gtkwidget *text; gtkwidget *box; gtktextiter start,end; gchar *buff; gtk_init(&argc,&argv); window=gtk_window_new(gtk_window_toplevel); gtk_window_set_title(gtk_window(window),文本); g_signal_connect(g_object(window),destroy,g_callback(gtk_main_quit),null); gtk_window_set_default_size(gtk_window(window), 350, 300); /*创建纵向盒*/ box=gtk_vbox_new(false,0); gtk_container_add(gtk_container(window),box); gtk_widget_show(box); /*创建文本框*/ text=gtk_text_view_new(); /*获取文本框缓冲区*/ textbuffer=gtk_text_view_get_buffer(gtk_text_view(text)); gtk_box_pack_start(gtk_box(box),text,true,true, 0); g_signal_connect(g_object(textbuffer),mark_set, g_callback(text_callback),null); gtk_widget_show(text); /*创建状态栏*/ status=gtk_statusbar_new(); gtk_box_pack_start(gtk_box(box),status,false,false, 0); gtk_widget_show(status); /*获取状态栏标志*/ statusbar_flag=gtk_statusbar_get_context_id (gtk_statusbar(status) ,text view); /*获取文本缓冲区的起始地址和结束地址*/ gtk_text_buffer_get_bounds(textbuffer,&start,&end); /*插入内容*/ gtk_text_buffer_insert(textbuffer,&start,文本框使用示例!, -1); gtk_text_buffer_get_bounds(textbuffer,&start,&end); /*获取指定区域的文本内容*/ buff=gtk_text_buffer_get_text(gtk_text_buffer(textbuffer),&start,&end,false); g_print(buff=%sn,buff); /*设置文本内容*/ gtk_text_buffer_set_text(gtk_text_buffer(textbuffer),123456789,-1); /*获取缓冲区的起始位置和结束位置*/ gtk_text_buffer_get_bounds(textbuffer,&start,&end); gtk_text_buffer_insert(textbuffer,&end,n文本框使用示例!123456789, -1); gtk_text_buffer_get_end_iter (textbuffer,&end); /*获取当前文本的行列*/ gint row = gtk_text_iter_get_line(&end); gint col = gtk_text_iter_get_line_offset(&end); int count=gtk_text_buffer_get_char_count(textbuffer); g_print(文本行:%dt文本列:%dt字数:%dn,row,col,count); gchar data[100]; snprintf(data,sizeof(data),行:%dt列:%dt字数:%d,row+1,col+1,count); /*将行、列、字数显示到状态栏*/ gtk_statusbar_push (gtk_statusbar (status),statusbar_flag,data); /*删除指定区域内容*/ //gtk_text_buffer_delete(textbuffer,&start,&end); gtk_widget_show(window); gtk_main(); return 0;}

71M651X 开发工具
盘点华灿光电的2020:LED业务发展再获支撑
iQOO 7与小米11同价位段
精彩“变身”的背后,离不开一项关键技术——柔性屏幕
工信部对加强报废电池高效利用提出规范 行业将更加完善安全
GTK构件 --- 文本视图控件GTKtextview
Cybershoes以前所未有的方式走入VR新世界
半导体激光器优缺点与驱动方式
整流二极管在电子电路中的主要作用
三星发布百万QLED 8K电视 8K电视启蒙爬升期已经降临
曝三星Galaxy S11+搭载一亿像素并支持100倍变焦 或一举超越市面上所有智能手机
利用Aqara来打造个性化全屋智能安防系统
SpringBoot + Sharding JDBC,一文搞定分库分表、读写分离
2019年DRAM市场供过于求,全球半导体营收下降12%
TE Connectivity发布2016年企业责任报告
小米又有新机?红米Note5曝光:骁龙652+4GB+安卓7.1
断相与相序继电器功能特点
伺服的控制模式是怎样的?该怎样系统的掌握这一块?
美图手机上半年出货量下滑 求生之路困难重重
英威腾粉末成型行业解决方案满足工业多样化通讯需求