0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

GTK構(gòu)件 --- 文本視圖控件GTKtextview

嵌入式技術(shù) ? 來源:嵌入式技術(shù) ? 作者:嵌入式技術(shù) ? 2022-11-29 08:44 ? 次閱讀

? 文本視圖控件(GtkTextView)是用以取代原有的文本編輯(GtkText)控件的,它包括一個文本緩沖區(qū)(GtkTextBuffer),用來保存文本控件顯示的帶有標(biāo)記性的文字,且一個緩沖區(qū)支持多個顯示;緩沖區(qū)文本的迭代(GtkTextIter),用來替代緩沖區(qū)的某一位置(首部、尾部、某一行等),以便向其中插入數(shù)據(jù)或控件;緩沖區(qū)的書簽(GtkTextMark),表示緩沖區(qū)中的某一具體位置,以便進(jìn)行滾動操作;緩沖區(qū)的文本標(biāo)記(GtkTextTag),可以應(yīng)用到緩沖區(qū)中文本的屬性標(biāo)記(如本例中的藍(lán)色前景,居中等);緩沖區(qū)的標(biāo)記表(GtkTextTagTable)聯(lián)合多種文本屬性標(biāo)記一起使用。

當(dāng)文本視圖緩沖區(qū)(GtkTextBuffer)光標(biāo)發(fā)生變化時將觸發(fā)mark_set信號。

1.相關(guān)接口函數(shù)

/*創(chuàng)建文本視圖*/
GtkWidget*gtk_text_view_new (void)
/*獲取文本視圖緩沖區(qū)*/
GtkTextBuffer*gtk_text_view_get_buffer (GtkTextView *text_view)
/*獲取緩沖區(qū)文本的起始位置和結(jié)束位置,start、end定義GtkTextIter 變量取地址傳入即可*/
void gtk_text_buffer_get_bounds (GtkTextBuffer *buffer,GtkTextIter *start,GtkTextIter   *end)
/*像緩沖區(qū)插入數(shù)據(jù)*/
void gtk_text_buffer_insert (GtkTextBuffer *buffer,GtkTextIter *iter,const gchar *text,gint len)
形參:buffer --文本緩沖區(qū)
      iter  --插入數(shù)據(jù)位置,gtk_text_buffer_get_bounds獲取的的位置
      text  --插入內(nèi)容
      len  --插入的內(nèi)容長度,填-1表示插入整個text
/*獲取緩沖區(qū)的起始位置*/
void gtk_text_buffer_get_start_iter (GtkTextBuffer *buffer,GtkTextIter *iter)
/*獲取緩沖區(qū)的結(jié)束位置*/
void gtk_text_buffer_get_end_iter (GtkTextBuffer *buffer,GtkTextIter *iter)
/*獲取緩沖區(qū)的行數(shù)*/
gint gtk_text_iter_get_line (const GtkTextIter *iter)
/*獲取緩沖區(qū)列數(shù)*/
gint gtk_text_iter_get_line_offset (const GtkTextIter *iter)
/*刪除緩沖區(qū)中的內(nèi)容,end填-1表示從start到緩沖區(qū)結(jié)束*/
gtk_text_buffer_delete (GtkTextBuffer *buffer,GtkTextIter *start,GtkTextIter *end)
/*獲取字符數(shù)*/
gint gtk_text_buffer_get_char_count (GtkTextBuffer *buffer)

2.文本視圖構(gòu)件示例

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字?jǐn)?shù):%dn",row,col,count);
	
	gchar buff[100];
	snprintf(buff,sizeof(buff),"行:%dt列:%dt字?jǐn)?shù):%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);

	/*創(chuàng)建縱向盒*/
	box=gtk_vbox_new(FALSE,0);
	gtk_container_add(GTK_CONTAINER(window),box);
	gtk_widget_show(box);
	/*創(chuàng)建文本框*/
	text=gtk_text_view_new();
	/*獲取文本框緩沖區(qū)*/
	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);

	/*創(chuàng)建狀態(tài)欄*/
	status=gtk_statusbar_new();
	gtk_box_pack_start(GTK_BOX(box),status,FALSE,FALSE, 0);
	gtk_widget_show(status);
	/*獲取狀態(tài)欄標(biāo)志*/
	statusbar_flag=gtk_statusbar_get_context_id (GTK_STATUSBAR(status) ,"TEXT VIEW");
	
	/*獲取文本緩沖區(qū)的起始地址和結(jié)束地址*/
	gtk_text_buffer_get_bounds(textbuffer,&start,&end);
	/*插入內(nèi)容*/
	gtk_text_buffer_insert(textbuffer,&start,"文本框使用示例!", -1);
	gtk_text_buffer_get_bounds(textbuffer,&start,&end);
	/*獲取指定區(qū)域的文本內(nèi)容*/
	buff=gtk_text_buffer_get_text(GTK_TEXT_BUFFER(textbuffer),&start,&end,FALSE);
	g_print("buff=%sn",buff);
	/*設(shè)置文本內(nèi)容*/
	gtk_text_buffer_set_text(GTK_TEXT_BUFFER(textbuffer),"123456789",-1);

	/*獲取緩沖區(qū)的起始位置和結(jié)束位置*/
	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);
	/*獲取當(dāng)前文本的行列*/
	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字?jǐn)?shù):%dn",row,col,count);
	gchar data[100];
	snprintf(data,sizeof(data),"行:%dt列:%dt字?jǐn)?shù):%d",row+1,col+1,count);
	/*將行、列、字?jǐn)?shù)顯示到狀態(tài)欄*/
	gtk_statusbar_push (GTK_STATUSBAR (status),statusbar_flag,data);
	
	/*刪除指定區(qū)域內(nèi)容*/
	//gtk_text_buffer_delete(textbuffer,&start,&end);
	gtk_widget_show(window);
	gtk_main();
	return 0;
}


審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4284

    瀏覽量

    62325
  • 構(gòu)件
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    7766
收藏 人收藏

    評論

    相關(guān)推薦

    GTK+ 2.0 教程

    Labels箭頭 Arrows工具提示對象 The Tooltips Object進(jìn)度條 Progress Bars對話框 Dialogs標(biāo)尺 Rulers狀態(tài)欄 Statu***ars文本輸入構(gòu)件
    發(fā)表于 10-21 17:17

    GTK術(shù)語表

    GTK術(shù)語表Table 1. 術(shù)語表0 API Application Program Interface (應(yīng)用程序接口) 1 GDK GIMP Drawing Kit (GIMP 繪圖包) 2
    發(fā)表于 10-21 17:17

    樹形控件與下拉文本控件綁定

    怎樣將樹形控件與下拉文本控件綁定?如圖,當(dāng)移動樹形控件垂直條時,下拉文本控件也隨其一起移動。當(dāng)點
    發(fā)表于 01-07 16:30

    第56章 TEXT-文本控件

    轉(zhuǎn)stemwin教程本期教程講解STemWin支持的文本控件,文本控件應(yīng)該算是這些控件里面最簡單的,前幾期在講解其它
    發(fā)表于 10-18 11:24

    基于GTK+的組合構(gòu)件設(shè)計

    基于GTK+的組合構(gòu)件設(shè)計 圖形用戶界面是用戶與儀器的唯一交互方式,也是整個嵌入式系統(tǒng)一個尤為重要的方面。GTK+即是一個應(yīng)用于嵌入式圖形界面開發(fā)的良好圖形庫。在
    發(fā)表于 10-15 08:55 ?757次閱讀
    基于<b class='flag-5'>GTK</b>+的組合<b class='flag-5'>構(gòu)件</b>設(shè)計

    ARM的文本控件

    ARM的文本控件一、實驗?zāi)康膶W(xué)習(xí)文本控件的使用。掌握以二進(jìn)制形式打開并讀取文件的方法。把一個二進(jìn)制文件中的數(shù)字的內(nèi)容在
    發(fā)表于 12-26 00:00 ?775次閱讀
    ARM的<b class='flag-5'>文本</b>框<b class='flag-5'>控件</b>

    工程技術(shù)筆記-文本控件應(yīng)用

    廣州大彩串口屏文本控件屏幕上所有的文本都要通過文本控件來進(jìn)行顯示。 文本可以由主機(jī)輸入,也可以
    發(fā)表于 05-10 11:49 ?3次下載

    廣州大彩串口屏工程技術(shù)筆記-文本控件應(yīng)用

    廣州大彩串口屏工程技術(shù)筆記-文本控件應(yīng)用詳細(xì)說明書
    發(fā)表于 07-01 17:35 ?10次下載

    基于Json格式的文本視圖驗證工具

    基于Json格式的文本視圖驗證工具
    發(fā)表于 09-19 09:15 ?8次下載

    GTK構(gòu)件之雜項構(gòu)件

    ??標(biāo)簽(Labels)是GTK中最常用的構(gòu)件,實際上它很簡單。因為沒有相關(guān)聯(lián)的X窗口,標(biāo)簽不能引發(fā)信號。如果需要獲取或引發(fā)信號,可以將它放在一個事件盒中,或放在按鈕構(gòu)件里面。
    的頭像 發(fā)表于 11-25 10:20 ?804次閱讀
    <b class='flag-5'>GTK</b><b class='flag-5'>構(gòu)件</b>之雜項<b class='flag-5'>構(gòu)件</b>

    GTK構(gòu)件之雜項構(gòu)件(2)

    ?GTK(GIMP Toolkit)是一套源碼以LGPL許可協(xié)議分發(fā)、跨平臺的圖形工具包。最初是為GIMP寫的,已成為一個功能強(qiáng)大、設(shè)計靈活的一個通用圖形庫,是GNU/Linux下開發(fā)圖形界面
    的頭像 發(fā)表于 11-27 07:53 ?985次閱讀
    <b class='flag-5'>GTK</b><b class='flag-5'>構(gòu)件</b>之雜項<b class='flag-5'>構(gòu)件</b>(2)

    GTK構(gòu)件之微調(diào)按鈕

    ? 微調(diào)按鈕(Spin Button)構(gòu)件通常用于讓用戶從一個取值范圍你選擇一個值。它由一個文本輸入框和旁邊的向上和向下兩個按鈕組成。點擊某一個按鈕會讓文本輸入框里的數(shù)值大小在一定范圍你改變。
    的頭像 發(fā)表于 11-30 09:50 ?1205次閱讀
    <b class='flag-5'>GTK</b><b class='flag-5'>構(gòu)件</b>之微調(diào)按鈕

    GTK渲染攝像頭圖像數(shù)據(jù)

    —— Linux的API是Xlib。由于GTK和機(jī)器的API之間沒有直接接口,移植GTK+就成為移植GLIB和GDK的問題。GDK提供像元的繪制能力以及低層的窗口建立和處理能力。對許多應(yīng)用來說,使用構(gòu)件
    的頭像 發(fā)表于 12-01 09:19 ?1065次閱讀

    廣州大彩VisualTFT組態(tài)控件教程(二)文本控件

    電子發(fā)燒友網(wǎng)站提供《廣州大彩VisualTFT組態(tài)控件教程(二)文本控件.pdf》資料免費(fèi)下載
    發(fā)表于 10-13 17:39 ?1次下載

    大彩串口屏控件教程2 - 串口屏文本控件應(yīng)用

    大彩串口屏控件教程2-串口屏文本控件應(yīng)用
    發(fā)表于 04-29 12:44 ?19次下載