Qt中定时器的使用

本文介绍了如何在Qt环境中使用定时器。通过定义timmer类,实现了对定时器的事件处理,包括设置文本、定时事件触发及显示事件。代码展示了类的定义和头文件的包含。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



#ifndef TIMMER_H
#define TIMMER_H

#include <QtWidgets/QMainWindow>
#include "ui_timmer.h"

class timmer : public QMainWindow
{
    Q_OBJECT

public:
    timmer(QWidget *parent = 0);
    ~timmer();
    QString text(){return myText;};
    void setText(const QString &text);
    void paintEvent(QPaintEvent *event);
    void timerEvent(QTimerEvent *event);
    void showEvent(QShowEvent *event);
private:
    Ui::timmerClass ui;
    int startNum;
    int showID;
    QString myText;
};

#endif // TIMMER_H




#include "timmer.h"

#include <QPainter>
#include <QTimerEvent>
timmer::timmer(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    startNum=0;
    showID=0;
    setText("   Hello Qt   ");
}

timmer::~timmer()
{

}

void timmer::setText(const QString &text)
{
    myText=text;
    update();
    updateGeometry();
}

void timmer::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
   int texeWidth=fontMetrics().width(text());//确定文本在水平方向上所需要的空间
    if(textWidth<1)
        return;
    int x=-startNum;
    while(x<width())
    {
        painter.drawText(x,0,texeWidth,height(),Qt::AlignLeft|Qt::AlignVCenter,text());///在考虑offset值得同时,多次绘制文本,直到能够填满窗口部件的宽度为止
        x+=textWidth;
    }

}
void timmer::showEvent(QShowEvent *)
{
    showID=startTimer(30);
}
void timmer::timerEvent(QTimerEvent *event)
{
    if(event->timerId()==showID)
    {
        startNum++;
        if(startNum>=fontMetrics().width(text()))
            startNum=0;
        scroll(-1,0);//把窗口部件的内容向左滚动一个像素
    }

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值