Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GTK TextView-创建静态显示格式_C++_User Interface_Gtk_Gtkmm_Gtktextview - Fatal编程技术网

C++ GTK TextView-创建静态显示格式

C++ GTK TextView-创建静态显示格式,c++,user-interface,gtk,gtkmm,gtktextview,C++,User Interface,Gtk,Gtkmm,Gtktextview,我试图模拟一个硬件,这个硬件有一个静态的带状显示 为此,我想使用TextView。我的显示器有10行,25列。所以我认为文本视图应该足够简单 基本上,我希望能够说“在第X行插入/替换字符串S,从第Y列开始”。我可能只需要更新一行,甚至一行中的一列 不过,我并没有成功地让它发挥作用。我所能做的最好的事情就是在创建文本视图时,用10行25个空格填充文本视图,然后使用get_iter_at_line_offset获取一行的迭代器,然后将新文本推到该行上 但这将开始在行中添加文本,而不是替换现有的文本

我试图模拟一个硬件,这个硬件有一个静态的带状显示

为此,我想使用TextView。我的显示器有10行,25列。所以我认为文本视图应该足够简单

基本上,我希望能够说“在第X行插入/替换字符串S,从第Y列开始”。我可能只需要更新一行,甚至一行中的一列

不过,我并没有成功地让它发挥作用。我所能做的最好的事情就是在创建文本视图时,用10行25个空格填充文本视图,然后使用
get_iter_at_line_offset
获取一行的迭代器,然后将新文本推到该行上

但这将开始在行中添加文本,而不是替换现有的文本

我需要行和列控件(即需要能够在特定(X,Y)坐标处设置文本)

我想这是可能的使用标记


有谁能给我一个简单的例子,说明我是如何做到这一点的?不幸的是,关于这类事情的文档并不多。

您必须在特定行X行获得一个iter,然后使用迭代器的
forward\u chars()
方法向前移动Y个字符。然后删除要替换的字符数,最后插入要插入的文本。我认为,您可以使用迭代器来完成这一切——当您更改缓冲区时,迭代器将失效,但当您删除文本时,其中一个迭代器将重新验证,以指向文本所在的位置。

如果您的目标是GTK+3.x,您应该真正考虑使用Cairo。因为您实际上不需要文本缓冲区,所以使用GtkTextView似乎有些过分,而且有点不对齐


请看关于如何使用的最基本的介绍。然后看看,这应该足够让您开始了。

我不知道静态功能区显示是什么,但根据您的描述,我认为基于Gtk::DrawingArea的方法相对简单,可以控制结果的外观。简单地在内存中维护GUI会不会太糟糕,然后使用set_text在需要更改时对整个缓冲区执行基本擦除和刷新?基本上在长字符数组上执行我的所有操作(每25个索引处都有换行符),然后通过set_text?推送,这取决于需要更新显示的频率。也许最好只是尝试一下,然后再优化它,如果它太慢?内存不会有问题,现在大多数计算机至少有250字节的内存。每秒更新一次。我想我会走这条路。我喜欢使用cairo-like-unwind-post的想法,但是我有一个beta测试的截止日期,所以我现在就这样做,等我有时间进行第2阶段时再进行优化。为什么只使用GTK+3.x。而不是GTK+2?我知道这里和那里都有很多变化,但是性能有改进吗?因为根据我的经验,开罗对于这样的事情来说是可怕的。