2012-05-07 21 views
2

我想模擬一塊硬件,並且這個硬件有一個靜態的色帶顯示。GTK TextView - 創建一個靜態顯示格式

要做到這一點,我想使用一個TextView。我的顯示器有10行,25列。所以我認爲TextView應該很簡單。

基本上,我想能說「插入/替換第X行的字符串S,從Y列開始」。我可能只需要更新一個特定的行,甚至是一行中的一個列。

雖然我沒有成功獲得這個工作。我能夠做的最好的事情是當我創建它時用10行25個空格填充TextView,然後使用get_iter_at_line_offset獲取行的迭代器,然後將新文本推送到該行。

但是,這將開始追加文本到行,而不是替換現有的。

我需要行和列控制(即需要能夠在一個特定的(X,Y)座標來設置文本)。

我假設這在某種程度上可能使用標記。

任何人都可以給我一個如何做到這一點的快速例子嗎?不幸的是,關於這類事情的文檔並不多。

+0

我不知道一個靜態的色帶顯示是什麼,但根據您的描述,我覺得一個GTK ::繪圖區爲基礎的方法是相對簡單的,並有可能控制結果的外觀。 – ergosys

回答

1

你必須在特定的行,行X獲得一個國際熱核實驗堆,然後使用迭代器的forward_chars()方法前進y個字符。然後刪除要替換的字符數,最後插入要插入的文本。你可以用迭代器來完成所有工作,我認爲 - 當你改變緩衝區時,迭代器是無效的,但是當你刪除文本時,你的一個迭代器會被重新驗證以指向文本所在的位置。

+0

如果簡單地將我的GUI保存在內存中,然後使用set_text對整個緩衝區進行基本擦除和刷新,當我想要更改時,它會完全變得糟糕嗎?基本上對長字符數組執行所有操作(在每25個索引處換行符),然後通過set_text來執行該操作? – jasonmclose

+0

取決於您需要更新顯示器的頻率。也許最好只嘗試一下,如果速度太慢,以後再進行優化?內存不會成爲問題,現在大多數計算機至少有250字節的內存。 – ptomato

+0

每秒更新一次。我想我會走這條路。我喜歡使用像開卷一樣的開羅的想法,但我有一個截止日期,以滿足一個測試版測試,所以我現在會這樣做,並且稍後優化它,一旦我得到階段2的時間。 – jasonmclose

0

如果你的目標是GTK + 3.x,你應該真正考慮使用開羅。由於您實際上並不需要文本緩衝區,因此使用GtkTextView似乎有點矯枉過正和一些錯誤對齊。

看看如何draw with Cairo in GTK+的基本介紹。然後看看text-rendering Cairo APIs,這應該足以讓你開始。

+0

嘿。爲什麼只是GTK + 3.x.而不是GTK + 2?我知道這裏和那裏有不少變化,但有沒有性能改進?因爲從我的經驗來看,開羅對於這樣的事情是可怕的。 – Ivarpoiss