在.h文件中:
#include <QLabel>
#include <QTimer>
private:
void showScrollingText();
int m_index;
int m_exchange;
int m_startTime;
QLabel *m_labelScrolling;
QString m_showText;
QTimer *m_timer;
在.cpp文件中:
#include <QTime>
#include <QFont>
#include <QPalette>
获取实时时间的函数:
int getCurrentTime()
{
int tm = time(NULL);
return tm;
}
构造函数:
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
m_index = 0;
m_exchange = 0;
m_startTime = 0;
m_labelScrolling = new QLabel(this);
m_labelScrolling->setGeometry(0, 200, 240, 40);
m_labelScrolling->setAlignment(Qt::AlignCenter);
m_timer = new QTimer(this);
connect(m_timer, &QTimer::timeout, this, &Widget::showScrollingText);
}
文字会在QLabel上显示,setGeometry(0, 200, 240, 40)中的第1、2个参数是以左上角为原点的坐标,第3、4个参数是设置label的大小;setAlignment(Qt::AlignCenter)设置居中显示;由定时器启动showScrollingText()从而显示文字。
启动函数:
{
m_showText = "Hello World!";
m_index = 0;
m_exchange = 0;
m_startTime = getCurrentTime();
m_timer->start(400);
}
实现显示的函数:
void Widget::showScrollingText()
{
printf("showScorllingtext...\n");
int m_size = m_showText.size();
int fontsize = 20;
QFont ftt("Microsoft YaHei", fontsize, 63);
QPalette pal;
pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00));
pal.setColor(QPalette::WindowText, Qt::blue);
switch (m_exchange)
{
case 0:
m_labelScrolling->setText(m_showText.left(m_index++));
if (m_index == m_size){
m_exchange = 1;
}
break;
case 1:
m_labelScrolling->setText(m_showText.right(m_index--));
if (m_index == 0){
m_exchange = 0;
}
break;
default:
break;
}
m_labelScrolling->setFont(ftt);
m_labelScrolling->setPalette(pal);
m_labelScrolling->show();
if (getCurrentTime() - m_startTime > 10 && m_index == 0){
m_timer->stop();
m_labelScrolling->hide();
}
}
m_size用来获取要显示的字符串大小;QFont定义的变量用来设置显示文字的大小;QPalette定义的变量用来设置背景透明以及字体的颜色。m_showText.left(m_index++),在初始时m_index为0,每执行一次showScrollingText(),m_index都会加1,也就是添加一个字节;当m_index等于m_size时,就会换成执行m_showText.right(m_index--),又会从左边开始一个字一个字的减少,从而达到文字滚动的效果。最后的if语句在显示时间超过10s且m_index=0时,就会执行,然后停止定时器以及将label隐藏。