• 17833阅读
  • 17回复

QTextEdit显示问题 [复制链接]

上一主题 下一主题
离线iiiyyyhhhsss
 

只看楼主 倒序阅读 楼主  发表于: 2009-08-30
如果用setText()函数,每次更改,内容都会覆盖,如何才能让显示不是覆盖,而是增加?有没有具体函数呢?
离线dbzhang800

只看该作者 1楼 发表于: 2009-08-30
提前不妨先看一眼manual

void QTextEdit::append ( const QString & text )   [slot]

Appends a new paragraph with text to the end of the text edit.
离线iiiyyyhhhsss

只看该作者 2楼 发表于: 2009-08-30
其实这个问题还是之前那个Ping的问题的延伸,现在已经成功在我的界面上显示ping的输出结果;

根据我之前看wader的博客http://blog.csdn.net/WaderChan/archive/2009/05/19/4199913.aspx

虽然这样的确能有不是覆盖的效果,但是我觉得它的方法是有一处不好,就是每次都要重新copy所有的内容到界面上,

严格上讲不是增加(效果虽然是),但是这样使得程序的效率很低。。。。
离线iiiyyyhhhsss

只看该作者 3楼 发表于: 2009-08-30
好的
离线iiiyyyhhhsss

只看该作者 4楼 发表于: 2009-08-30
嗯,成功!
离线wader
只看该作者 5楼 发表于: 2009-08-30
这个append函数我也试过,但问题是:每次使用时他默认加了一个回车,也就是中间会多一个空行,所以没有采用
离线dbzhang800

只看该作者 6楼 发表于: 2009-08-30
引用第5楼wader于2009-08-30 12:28发表的  :
这个append函数我也试过,但问题是:每次使用时他默认加了一个回车,也就是中间会多一个空行,所以没有采用


恩,这样需求的话,每次先移动光标到结尾,再insert就行了。
离线wader
只看该作者 7楼 发表于: 2009-08-30
这样也可以,学习了
离线iiiyyyhhhsss

只看该作者 8楼 发表于: 2009-08-30
如何移动光标到结尾,我在QTextEdit里找不到哪个成员是对应这个操作的。。。。

还有想问,移动光标到结尾是一个退格的操作吗?如果不是的话,那么,文档的最后岂不是就会多出很多空行了?
离线dbzhang800

只看该作者 9楼 发表于: 2009-08-30
引用第8楼iiiyyyhhhsss于2009-08-30 14:57发表的  :
如何移动光标到结尾,我在QTextEdit里找不到哪个成员是对应这个操作的。。。。

manual 中与的光标移动相关的函数似乎只有一个:

void QTextEdit::moveCursor ( QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor )

引用第8楼iiiyyyhhhsss于2009-08-30 14:57发表的  :
还有想问,移动光标到结尾是一个退格的操作吗?如果不是的话,那么,文档的最后岂不是就会多出很多空行了?


不是退格,移动光标是很常见的动作。
你在word或记事本或其他东西上打字的时候,肯定会经常移动鼠标到某一位置,然后点一下,或者通过按键盘上的上下左右箭头来移动光标

只要不输入回车(\r)或换行(\n) 怎么可能会多出很多空行呢?
离线iiiyyyhhhsss

只看该作者 10楼 发表于: 2009-08-30
wader不是这样说吗?:这个append函数我也试过,但问题是:每次使用时他默认加了一个回车,也就是中间会多一个空行,所以没有采用。。

就是说每增加一次append,都会增加一个换行符啊....
离线dbzhang800

只看该作者 11楼 发表于: 2009-08-30
引用第10楼iiiyyyhhhsss于2009-08-30 20:13发表的  :
wader不是这样说吗?:这个append函数我也试过,但问题是:每次使用时他默认加了一个回车,也就是中间会多一个空行,所以没有采用。。
就是说每增加一次append,都会增加一个换行符啊....


这个就是这样啊,manual说的很清楚

  1. void QTextEdit::append ( const QString & text )   [slot]
  2. Appends a new paragraph with text to the end of the text edit.

每次增加一个段落。也就是该方法会追加换行。

所以我建议他移动光标到末尾,然后调用插入,来避免这个问题。 你前面那一楼的帖子不是针对insert说的么?
离线iiiyyyhhhsss

只看该作者 12楼 发表于: 2009-08-30
看来我还没有理解insert的作用。。。
离线iiiyyyhhhsss

只看该作者 13楼 发表于: 2009-08-30
我想了另一种方法,就是每次用完append后,再使用append('\b')给textEdit一个退格键,应该行吧。

但为什么我给textEdit一个退格键时,退格键变成了乱码,而不是真正的退格作用呢?
离线dbzhang800

只看该作者 14楼 发表于: 2009-08-30
引用第13楼iiiyyyhhhsss于2009-08-30 21:00发表的  :
我想了另一种方法,就是每次用完append后,再使用append('b')给textEdit一个退格键,应该行吧。
但为什么我给textEdit一个退格键时,退格键变成了乱码,而不是真正的退格作用呢?


很多事情不是想当然的,要看手册,看规则,然后分析。


深入一点分析append:
实际上 append 并不是在字符串之后追加换行、而是之前。比如你append("aaaaa"), 相当于在末尾插入("\naaaaa")。即使这样说,仍不全对。当文件框为空是,追加("aaaa"), 和插入("aaaa")是一致的。 注意:手册上说的只是,添加一个段落!!


2
你这儿的错误和上面的分析没有什么关系。

记住一点:'\b',只不过是一个字符,一个不可见字符而已,说到底和‘a’,‘b’什么的没什么区别。只不过你用的文本编辑器之类的,添加了键盘动作或对该字符进行了处理,比如,遇到该字符,就去掉字符串中的最后一个字符。而QTextEdit 手册中 对append并没有可进行这个处理的说明

你append一个字符串"aaaa",当前内容就是"aaaa", 你append("\b"),当前内容就是(“aaaa\n\b”),由于\b是不可见字符,TextEdit怎么显示它就是它自己的自由了。

当然你自己子类话QTextEdit的话,怎么处理就都是你自己说了算了。





以上只是个人的看法,不当之处还请大家指正。
离线iiiyyyhhhsss

只看该作者 15楼 发表于: 2009-09-04
楼上说得对,QTextEdit::append是增加段落。。。
而QString::append() 是增加字符串,不会自动增加换行符。。。
而QString:;insertPlainText()也是在紧接着的地方增加。。。
[ 此帖被iiiyyyhhhsss在2009-09-04 15:23重新编辑 ]
离线onmyway
只看该作者 16楼 发表于: 2012-09-27
貌似 insert 可以去掉回车
离线lxdlbs371

只看该作者 17楼 发表于: 2012-11-12
测试了 要使用m_textEdit->insertPlainText(str);
快速回复
限100 字节
 
上一个 下一个