LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 818|回复: 2

求助:QT程序开发中的PAINTTEXT函数

[复制链接]
发表于 2008-12-12 20:47:37 | 显示全部楼层 |阅读模式
最近想写一个类似于那种能向上自动滚动的“About”对话框,如FIREFOX的ABOUT那种,可以自动将文字向上滚动,但在编写代码中,却遇到了很奇怪的问题。

  主要就是似乎全屏的rect并不能显示我的文件所有行,具体原因还不是太清楚,所以想请大家帮忙分析一下:



  1. #include <QtGui>

  2. #include "ticker.h"

  3. Ticker::Ticker(QWidget *parent)
  4.     : QWidget(parent)
  5. {
  6.     myTimerId = 0;
  7. }

  8. void Ticker::setText(const QString &newText)
  9. {
  10.   myText = newText;//这个myText是我从文件里读取出来的,
  11.   //行数基本上高于全屏的高度,因此也导致了我下面遇到的问题
  12.     update();
  13.     updateGeometry();
  14. }

  15. QSize Ticker::sizeHint() const
  16. {
  17.     return fontMetrics().size(0, text());
  18. }

  19. void Ticker::paintEvent(QPaintEvent * /* event */)
  20. {
  21.     QPainter painter(this);
  22.     QRectF rect(0, 0, width(), height());

  23.     painter.setFont(QFont("宋体",14,QFont::Normal,false));
  24.     painter.drawText(rect, Qt::AlignLeft, myText);//我直接将这个东西绘在框子里
  25.     //在每次scroll时进行重绘,如果文件小的话,还能显示正常
  26.     //一当行数大于全屏高度,就会出现不正常的情况,具体见图
  27.     //请大家帮忙分析一下这样实现存在什么样的问题呢?
  28.     //谢谢!
  29. }

  30. void Ticker::showEvent(QShowEvent * /* event */)
  31. {
  32.     myTimerId = startTimer(15);
  33. }

  34. void Ticker::timerEvent(QTimerEvent *event)
  35. {
  36.     if (event->timerId() == myTimerId) {
  37.       scroll(0, -1);//这个就是向上滑动一行了
  38.       //      update();
  39.     } else {
  40.         QWidget::timerEvent(event);
  41.     }
  42. }

  43. void Ticker::hideEvent(QHideEvent * /* event */)
  44. {
  45.     killTimer(myTimerId);
  46.     myTimerId = 0;
  47. }

复制代码
 楼主| 发表于 2008-12-12 20:50:08 | 显示全部楼层
具体的显示结果请看附件,谢谢了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-12 20:50:51 | 显示全部楼层
哪位兄弟有类似的代码,能否让兄弟我参考一下呢,这样也可以的,谢谢了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表