? 文本視圖控件(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](https://file.elecfans.com//web2/M00/7E/F0/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文章
4346瀏覽量
62968 -
構件
+關注
關注
0文章
14瀏覽量
7801
發布評論請先 登錄
相關推薦
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
基于GTK+的組合構件設計
基于GTK+的組合構件設計
圖形用戶界面是用戶與儀器的唯一交互方式,也是整個嵌入式系統一個尤為重要的方面。GTK+即是一個應用于嵌入式圖形界面開發的良好圖形庫。在
發表于 10-15 08:55
?781次閱讀
![基于<b class='flag-5'>GTK</b>+的組合<b class='flag-5'>構件</b>設計](https://file1.elecfans.com//web2/M00/A4/6A/wKgZomUMNB6AGA1zAAA6i2ZxtZw077.jpg)
GTK構件之雜項構件(2)
?GTK(GIMP Toolkit)是一套源碼以LGPL許可協議分發、跨平臺的圖形工具包。最初是為GIMP寫的,已成為一個功能強大、設計靈活的一個通用圖形庫,是GNU/Linux下開發圖形界面
![<b class='flag-5'>GTK</b><b class='flag-5'>構件</b>之雜項<b class='flag-5'>構件</b>(2)](https://file.elecfans.com//web2/M00/7E/99/pYYBAGOCpwGAM59BAABOiGf4t0c927.png)
GTK構件之微調按鈕
? 微調按鈕(Spin Button)構件通常用于讓用戶從一個取值范圍你選擇一個值。它由一個文本輸入框和旁邊的向上和向下兩個按鈕組成。點擊某一個按鈕會讓文本輸入框里的數值大小在一定范圍你改變。
![<b class='flag-5'>GTK</b><b class='flag-5'>構件</b>之微調按鈕](https://file.elecfans.com//web2/M00/7E/A6/poYBAGOGttiAHAp7AAG13z1IBuA001.png)
GTK渲染攝像頭圖像數據
—— Linux的API是Xlib。由于GTK和機器的API之間沒有直接接口,移植GTK+就成為移植GLIB和GDK的問題。GDK提供像元的繪制能力以及低層的窗口建立和處理能力。對許多應用來說,使用構件
評論