【Qt-Timer】

Qt编程指南

  • [■ QTimeEvent](#■ QTimeEvent)
  • [■ Qtimer](#■ Qtimer)
  • [■ QDateTimeEdit](#■ QDateTimeEdit)
  • [■ QDateTime](#■ QDateTime)
  • ■
  • ■

■ QTimeEvent

cpp 复制代码
1.启动定时器
定时器ID startTimer (时间间隔);
int idt = startTimer (250);
每隔指定的时间间隔,触发一次定时器事件。
2.定时器事件处理
virtual void timerEvent (QTimeEvent* envet);
每当定时器事件触发时,该虚函数被自动调用。
通过QTimeEvent::timerId()区分不同的定时器。
3.关闭定时器
killTimer (定时器ID);

■ Qtimer

cpp 复制代码
timerLiquid = new QTimer(this);
timerLiquid->start(60000); //60000==1min
connect(timerLiquid,SIGNAL(timeout()),this,SLOT(slots_timerLiquidHandle()));
void MainWindow::slots_timerLiquidHandle()
{
    static float value = 0.0001f;
    for(int i=1;i<=PUMPMAXNUMBER;i++)
    {
        value += PumpVect[i]->getTotalVolume();
    }
    emit emit_TotalVolumeToChart(value+=1);
}
private slots:
    void slots_timerLiquidHandle();
public slots:
        void slots_timerLiquidHandle();

    timer1 = new QTimer(this); // 1-second timer
    timer1->start(1000);
    connect(timer1,&QTimer::timeout,[=](){
        pumpALeve = m_alarmInfo.Level();
        setAlarmBackColour(pumpALeve);                  //NO_LEVEL_ALARM  MID_LEVEL_ALARM  HIGH_LEVEL_ALARM
        setAlarmString(getRoundAlarmStr(pumpALeve));
    });
cpp 复制代码
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(processOneThing())); 
timer->start();
这时,processOneThing()将会被重复调用并且应该很快返回(通常在处理一个数据项之后),这样Qt可以把事件传送给窗口部件,并且一旦它完成这个工作就停止这个定时器。这是在图形用户界面应用程序中实现繁重的工作的一个典型方法

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000);

QTimer::singleShot(100, this, SLOT(initData()));
QTimer::singleShot(200, this, SLOT(updateCaption()));  
可以通过设置setSingleShot(true)来让定时器只执行一次。也可以使用静态函数QTimer::singleShot():
class Widget2 : public QWidget
{
    Q_OBJECT
public:
    Widget2(QWidget* parent = 0 ):QWidget(parent),
        timeID(0)
    {
        QPalette palette (this->palette());
        palette.setBrush(QPalette::Background, QBrush(QColor(100,12,130)));
        this-> setPalette( palette );
        //2. 创建定时器
        timeID = startTimer(100,Qt::PreciseTimer);
    }
    ~Widget2(){}
protected:
    // 3. 重写定时器事件,接收定时的到来
    void timerEvent(QTimerEvent *event)
    {
        // 4. 判断是否为这个定时器ID(系统可能有多个定时器Id、这种方式启动的话、全放在这里处理)
        if(event->timerId() == timeID)
        {
            //TODO function
            if(timeID)
                killTimer(timeID);// 5.杀死定时器
            timeID = 0;
        }
    }
private:
    int timeID;//1. 声明定时器ID
};

■ QDateTimeEdit

cpp 复制代码
/*实例化对象,传入当前日期与时间*/
dateTimeEdit = new QDateTimeEdit(QDateTime::currentDateTime(),this);
dateTimeEdit->setGeometry(300, 200, 200, 30);
/* 弹出日期控件与否 */
//dateTimeEdit->setCalendarPopup(true);
/* 实例化对象,传入当前时间 */
timeEdit = new QTimeEdit(QTime::currentTime(),this);
timeEdit->setGeometry(300, 240, 200, 30);
/* 实例化对象,传入当前日期 */
dateEdit = new QDateEdit(QDate::currentDate(),this);
dateEdit->setGeometry(300, 280, 200, 30);
QDateTimeEdit.setDisplayFormat()   #指定显示格式
cpp 复制代码
QDateTimeEdit{
background:transparent;
border:1px solid rgb(82,143,199);
border-radius:2px;
min-height:26px;
max-height:26px;
}

QDateTimeEdit::up-arrow{
image:url(:/commonImg/Resources/image/common/upArrow.png);
}

QDateTimeEdit::down-arrow {
image:url(:/commonImg/Resources/image/common/downArrow.png);
}
QDateTimeEdit{
color: rgb(255, 255, 255);
background:transparent;
border:1px solid rgb(82,143,199);
border-radius:5px;
}

用qt 方式修改系统时间
        ui->dateTimeEdit->setProperty("noinput", true);
//    ui->dateTimeEdit->setDisplayFormat("yyyy-MM-dd HH:mm:ss");
    ui->dateTimeEdit->setDisplayFormat("yyyy-MM-dd HH:mm");
//    ui->dateTimeEdit->setCalendarPopup(true);
    ui->dateTimeEdit->setDateTime(QDateTime::currentDateTime());


    // 监听dateTimeEdit控件的valueChanged()信号,当用户修改日期和时间时执行操作
    QObject::connect(ui->dateTimeEdit, &QDateTimeEdit::dateTimeChanged, [&](const QDateTime &dateTime) {
        QString dateTimeStr = dateTime.toString("yyyy-MM-dd HH:mm:ss");

        // 设置系统时间
        QString cmd = QString("date -s \"%1\"").arg(dateTimeStr);
        qDebug() << "--------" << cmd;
        QProcess::execute(cmd);
    });
    
C语言 使用系统调用方式修改系统时间
void User::uphwclock(int y, int m, int d, int h, int min, int s)
{
    char data[100];
    sprintf(data,"date -s \"%d-%d-%d %d:%d:%d\"",y,m,d,h,min,s);

#if __arm__
    system(data);
    system("hwclock -w");
#endif
}

■ QDateTime

cpp 复制代码
qint64 m_cursec = QDateTime::currentDateTime().toMSecsSinceEpoch();  //毫秒
QDate dd = QDateTime::fromString("2023/6/6 10:6:10","yyyy/MM/dd hh:mm:ss").date();

■

cpp 复制代码

■

cpp 复制代码
相关推荐
一只鹿鹿鹿1 小时前
政务外网整体设计方案(PPT)
大数据·数据库·web安全·系统安全·流程图·政务
2603_965148111 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
AI砖家2 小时前
安全进入 Agent Loop:2027 年 Coding Agent 的决胜点
数据库·安全·codex·vibecoding
wangqiaowq2 小时前
SQL server C盘空间占满的处理
数据库·sql
文人sec2 小时前
SQL基础入门笔记 | 从零基础到掌握核心查询语句
数据库·笔记·sql
数字新视界2 小时前
机房动环监控提升运维效率
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
SelectDB技术团队2 小时前
冷热分层从建到验:Storage Policy 创建、表级与分区级绑定、SHOW TABLETS 验证的完整命令
大数据·数据库·elasticsearch·搜索引擎·数据分析·apache doris·冷热分层
lambo mercy4 小时前
Day3:结构化输出
java·数据库·oracle
派小心.4 小时前
小程序分享链路中来源参数的传递校验
大数据·前端·数据库·人工智能·小程序·数据分析
Είναι η κοπέλα4 小时前
向量数据库与嵌入模型:Chroma/FAISS/Milvus 选型
数据库·milvus·faiss