• 15417阅读
  • 12回复

QTextEdit只读方式显示超过一屏幕内容如何判断浏览内容已到最后 [复制链接]

上一主题 下一主题
离线kingnight
 
只看楼主 正序阅读 楼主  发表于: 2010-03-23
QTextEdit只读方式显示超过一屏幕内容时,没有鼠标,
(1)当按下UP ,DOWN,PageUp,PageDown,使向下或向上滚动时,如何能在程序中获得当前位置已到底部或顶部?
也就是说已经显示所有内容的最后,不需要再往下按?
eventFilter(QObject *obj, QEvent *event)
{
                case Qt::Key_Up:
                case Qt::Key_Down:
                case Qt::Key_PageUp:
                case Qt::Key_PageDown:
       ..........................................
}
(2)每次按键时移动的距离有时并不是一行,而是半行,请问如何调整每次都移动一行?
[ 此帖被kingnight在2010-03-30 11:13重新编辑 ]
离线kimtaikee

只看该作者 12楼 发表于: 2013-01-17
notifytextedit.h
  1. #ifndef NOTIFYTEXTEDIT_H
  2. #define NOTIFYTEXTEDIT_H
  3. #include <QTextEdit>
  4. class NotifyTextEdit : public QTextEdit
  5. {
  6.     Q_OBJECT
  7. public:
  8.     explicit NotifyTextEdit(QWidget *parent = 0);
  9.     
  10. private Q_SLOTS:
  11.     void slot_notifyCursorChanged();
  12. };
  13. #endif // NOTIFYTEXTEDIT_H

notifytextedit.cpp
  1. #include "notifytextedit.h"
  2. #include <QScrollBar>
  3. #include <QMessageBox>
  4. #include <QDebug>
  5. #define LOG() qDebug() << __FILE__ << ":" << __LINE__ << ":" << __FUNCTION__
  6. #define L(EXPR)  #EXPR << "=" << EXPR << "|"
  7. NotifyTextEdit::NotifyTextEdit(QWidget *parent) :
  8.     QTextEdit(parent)
  9. {
  10.     connect(this,SIGNAL(cursorPositionChanged()),this,SLOT(slot_notifyCursorChanged()));
  11. }
  12. void NotifyTextEdit::slot_notifyCursorChanged()
  13. {
  14.     QTextCursor currCursor = textCursor();
  15.     LOG() << L(currCursor.blockNumber()) << L(document()->blockCount());
  16.     if((currCursor.blockNumber() + 1) == document()->blockCount())
  17.     {
  18.         QMessageBox::information(this,"FYI","Reach bottom");
  19.     }
  20.     else if(currCursor.blockNumber() == 0)
  21.     {
  22.         QMessageBox::information(this,"FYI","Reach top");
  23.     }
  24. }

离线zangbingshan
只看该作者 11楼 发表于: 2013-01-17
兄弟,这个问题解决了嘛,我也是碰到了这个问题,能否给个建议!
离线yangfanxing
只看该作者 10楼 发表于: 2010-03-31
引用第9楼hanfeng000于2010-03-31 20:07发表的  :
判断 光标 位置 即可!

只读。。。没有光标啦。。。
PHPWind好恶心。。。不想看这种界面。。。
离线hanfeng000
只看该作者 9楼 发表于: 2010-03-31
判断 光标 位置 即可!
android 创意 开发论坛  www.android-zh.com
离线yangfanxing
只看该作者 8楼 发表于: 2010-03-30
(1)只是我建议的方法,感觉规范些;
但是似乎是复杂点儿。
textEdit->document()->blockCount();这个可以获得文本行数,但是是实际行数(不是因为text宽度不够造成的文本自动换行,跟记事本很相似)。。。那样的话要是自动换行了的话,那也没研究过~呵呵。。。

PS:如果移动的像素数对的,textEdit->scroll()也无不可以,就是字体大小改变的话就不适用了估计。。
PHPWind好恶心。。。不想看这种界面。。。
离线kingnight
只看该作者 7楼 发表于: 2010-03-30
引用第6楼yangfanxing于2010-03-30 11:42发表的  :
(1)textedit的话实现移动觉得要通过这样的方法:
a、获得所有的text及行列信息;
b、下移或上移,计算应该在哪一行(i);
c、从i行开始获取子text,并显示;
d、这样的话要是获取到最后一行没有字符了,再移动自然没效果了。
.......


感谢yangfanxing,请教b、下移或上移,计算应该在哪一行(i);
这句,如何去计算在哪行?
我想了个笨办法:textEdit->text().size()/一行的字数,每次移动都要自己计数,
另外或者用论坛里别人好像提到QTextCursor,我不是很懂呀
离线yangfanxing
只看该作者 6楼 发表于: 2010-03-30
(1)textedit的话实现移动觉得要通过这样的方法:
a、获得所有的text及行列信息;
b、下移或上移,计算应该在哪一行(i);
c、从i行开始获取子text,并显示;
d、这样的话要是获取到最后一行没有字符了,再移动自然没效果了。

(2)蛮写:textEdit->scroll(0,-textEdit->lineWidth()*textEdit->font().pointSize());
可以适当的改因子移动。当然这种显示方法似乎不太符合要求,因为是把整个text包括scrollBar都移动了。
PHPWind好恶心。。。不想看这种界面。。。
离线kingnight
只看该作者 5楼 发表于: 2010-03-30
问题已被重新编辑,希望高手给点意见
离线kingnight
只看该作者 4楼 发表于: 2010-03-29
没看到呀,文档我翻了,麻烦说的具体点好吗

问题已被重新编辑,希望高手给点意见
[ 此帖被kingnight在2010-03-30 11:15重新编辑 ]
离线benbenmajia

只看该作者 3楼 发表于: 2010-03-29
这个应该是有类似的TOP,BOTTOM这样的值的
安然.....
离线kingnight
只看该作者 2楼 发表于: 2010-03-28
抱歉,前一段有点事,这个没及时跟进,麻烦楼上说的详细点可以吗,再有我这个QTextEdit不显示鼠标,是用keyPressEvent()按键上下移动
离线yangfanxing
只看该作者 1楼 发表于: 2010-03-23
鼠标的globalPos

+

获取屏幕的分辨率:QWidget *d =QApplication::desktop();
PHPWind好恶心。。。不想看这种界面。。。
快速回复
限100 字节
 
上一个 下一个