0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2022-11-29 08:44 次阅读

  文本视图控件(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.文本视图构件示例

pYYBAGOFVfWAQttVAAB8WeQHwZg608.png#pic_center
#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;
}


审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4327

    浏览量

    62574
  • 构件
    +关注

    关注

    0

    文章

    14

    浏览量

    7771
收藏 人收藏

    评论

    相关推荐

    GTK+ 2.0 教程

    Labels箭头 Arrows工具提示对象 The Tooltips Object进度条 Progress Bars对话框 Dialogs标尺 Rulers状态栏 Statu***ars文本输入构件
    发表于 10-21 17:17

    GTK术语表

    GTK术语表Table 1. 术语表0 API Application Program Interface (应用程序接口) 1 GDK GIMP Drawing Kit (GIMP 绘图包) 2
    发表于 10-21 17:17

    树形控件与下拉文本控件绑定

    怎样将树形控件与下拉文本控件绑定?如图,当移动树形控件垂直条时,下拉文本控件也随其一起移动。当点
    发表于 01-07 16:30

    第56章 TEXT-文本控件

    转stemwin教程本期教程讲解STemWin支持的文本控件文本控件应该算是这些控件里面最简单的,前几期在讲解其它
    发表于 10-18 11:24

    基于GTK+的组合构件设计

    基于GTK+的组合构件设计 图形用户界面是用户与仪器的唯一交互方式,也是整个嵌入式系统一个尤为重要的方面。GTK+即是一个应用于嵌入式图形界面开发的良好图形库。在
    发表于 10-15 08:55 771次阅读
    基于<b class='flag-5'>GTK</b>+的组合<b class='flag-5'>构件</b>设计

    ARM的文本控件

    ARM的文本控件一、实验目的学习文本控件的使用。掌握以二进制形式打开并读取文件的方法。把一个二进制文件中的数字的内容在
    发表于 12-26 00:00 786次阅读
    ARM的<b class='flag-5'>文本</b>框<b class='flag-5'>控件</b>

    工程技术笔记-文本控件应用

    广州大彩串口屏文本控件屏幕上所有的文本都要通过文本控件来进行显示。 文本可以由主机输入,也可以
    发表于 05-10 11:49 3次下载

    广州大彩串口屏工程技术笔记-文本控件应用

    广州大彩串口屏工程技术笔记-文本控件应用详细说明书
    发表于 07-01 17:35 10次下载

    基于Json格式的文本视图验证工具

    基于Json格式的文本视图验证工具
    发表于 09-19 09:15 8次下载

    GTK构件之杂项构件

      标签(Labels)是GTK中最常用的构件,实际上它很简单。因为没有相关联的X窗口,标签不能引发信号。如果需要获取或引发信号,可以将它放在一个事件盒中,或放在按钮构件里面。
    的头像 发表于 11-25 10:20 841次阅读
    <b class='flag-5'>GTK</b><b class='flag-5'>构件</b>之杂项<b class='flag-5'>构件</b>

    GTK构件之杂项构件(2)

    GTK(GIMP Toolkit)是一套源码以LGPL许可协议分发、跨平台的图形工具包。最初是为GIMP写的,已成为一个功能强大、设计灵活的一个通用图形库,是GNU/Linux下开发图形界面
    的头像 发表于 11-27 07:53 1020次阅读
    <b class='flag-5'>GTK</b><b class='flag-5'>构件</b>之杂项<b class='flag-5'>构件</b>(2)

    GTK构件之微调按钮

      微调按钮(Spin Button)构件通常用于让用户从一个取值范围你选择一个值。它由一个文本输入框和旁边的向上和向下两个按钮组成。点击某一个按钮会让文本输入框里的数值大小在一定范围你改变。
    的头像 发表于 11-30 09:50 1286次阅读
    <b class='flag-5'>GTK</b><b class='flag-5'>构件</b>之微调按钮

    GTK渲染摄像头图像数据

    —— Linux的API是Xlib。由于GTK和机器的API之间没有直接接口,移植GTK+就成为移植GLIB和GDK的问题。GDK提供像元的绘制能力以及低层的窗口建立和处理能力。对许多应用来说,使用构件
    的头像 发表于 12-01 09:19 1149次阅读

    广州大彩VisualTFT组态控件教程(二)文本控件

    电子发烧友网站提供《广州大彩VisualTFT组态控件教程(二)文本控件.pdf》资料免费下载
    发表于 10-13 17:39 1次下载

    大彩串口屏控件教程2 - 串口屏文本控件应用

    大彩串口屏控件教程2-串口屏文本控件应用
    发表于 04-29 12:44 19次下载