|
最近想写一个类似于那种能向上自动滚动的“About”对话框,如FIREFOX的ABOUT那种,可以自动将文字向上滚动,但在编写代码中,却遇到了很奇怪的问题。
主要就是似乎全屏的rect并不能显示我的文件所有行,具体原因还不是太清楚,所以想请大家帮忙分析一下:
- #include <QtGui>
- #include "ticker.h"
- Ticker::Ticker(QWidget *parent)
- : QWidget(parent)
- {
- myTimerId = 0;
- }
- void Ticker::setText(const QString &newText)
- {
- myText = newText;//这个myText是我从文件里读取出来的,
- //行数基本上高于全屏的高度,因此也导致了我下面遇到的问题
- update();
- updateGeometry();
- }
- QSize Ticker::sizeHint() const
- {
- return fontMetrics().size(0, text());
- }
- void Ticker::paintEvent(QPaintEvent * /* event */)
- {
- QPainter painter(this);
- QRectF rect(0, 0, width(), height());
- painter.setFont(QFont("宋体",14,QFont::Normal,false));
- painter.drawText(rect, Qt::AlignLeft, myText);//我直接将这个东西绘在框子里
- //在每次scroll时进行重绘,如果文件小的话,还能显示正常
- //一当行数大于全屏高度,就会出现不正常的情况,具体见图
- //请大家帮忙分析一下这样实现存在什么样的问题呢?
- //谢谢!
- }
- void Ticker::showEvent(QShowEvent * /* event */)
- {
- myTimerId = startTimer(15);
- }
- void Ticker::timerEvent(QTimerEvent *event)
- {
- if (event->timerId() == myTimerId) {
- scroll(0, -1);//这个就是向上滑动一行了
- // update();
- } else {
- QWidget::timerEvent(event);
- }
- }
- void Ticker::hideEvent(QHideEvent * /* event */)
- {
- killTimer(myTimerId);
- myTimerId = 0;
- }
复制代码 |
|