当前位置: 首页 > news >正文

【Qt-Timer】

Qt编程指南

  • ■ QTimeEvent
  • ■ Qtimer
  • ■ QDateTimeEdit
  • ■ QDateTime

■ QTimeEvent

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

■ Qtimer

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 timertimer1->start(1000);connect(timer1,&QTimer::timeout,[=](){pumpALeve = m_alarmInfo.Level();setAlarmBackColour(pumpALeve);                  //NO_LEVEL_ALARM  MID_LEVEL_ALARM  HIGH_LEVEL_ALARMsetAlarmString(getRoundAlarmStr(pumpALeve));});
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 functionif(timeID)killTimer(timeID);// 5.杀死定时器timeID = 0;}}
private:int timeID;//1. 声明定时器ID
};

■ QDateTimeEdit

/*实例化对象,传入当前日期与时间*/
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()   #指定显示格式
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

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



http://www.lryc.cn/news/268060.html

相关文章:

  • Java多线程技术五——单例模式与多线程-备份
  • Seem环境安装
  • java八股jvm
  • 家校互通小程序实战开发02首页搭建
  • 使用matlab制作声音采样率转换、播放以及显示的界面
  • FPGA-AMBA协议、APB协议、AHB规范、AXI4协议规范概述及它们之间的关系
  • NI VeriStand中的硬件I / O延迟时间
  • YoloV8的目标检测推理
  • c语言中数据结构
  • 【GitHub精选项目】抖音/ TikTok 视频下载:TikTokDownloader 操作指南
  • Java开发框架和中间件面试题(3)
  • React面试题
  • 机器学习-数学学习汇总
  • 17个常用经典数据可视化图表与冷门图表
  • (五)Python 垃圾回收机制
  • 策略模式(组件协作)
  • 每日一题-----逆序字符串
  • js两个对象数组合并。并且去掉里边某个属性相同的对象
  • 创建重试机制
  • [c]统计数字
  • 采用ODP.NET 批量进行数据同步
  • 【vue滚动条插件vuescroll】【vue自定义滚动条】
  • python 1200例——【8】冒泡排序
  • 在PyTorch中设置随机数生成器的种子值
  • 用手机做无人直播怎么做?
  • 【zookeeper经典应用实战】
  • 12月25日作业
  • React学习计划-React16--React基础(五)脚手架创建项目、todoList案例、配置代理、消息订阅与发布
  • C语言中switch语句中的case后()
  • 【RocketMQ笔记02】安装RocketMQ可视化工具rocketmq-dashboard