SetTimer如何修改间隔时钟uElapse
在进行Windows程序开发时,经常会用到Windows的API,SetTimer是Windows API中提供的定时器,在C++开发中使用起来还是比较方便的。
这篇文章主要介绍下修改SetTimer的间隔时钟的方法:在SetTimer时给定时钟3s触发一次,如果我们现在想修改为间隔2s触发一次,该如何做呢?
我用QT做了一个简单的例子,去实现了一个简单的demo,界面上有个按钮,点击按钮可以切换SetTimer的间隔时间。
运行结果如下:
主要思路是:
调用SetTimer的时候会返回一个TimerID,修改SetTimer的使用TimerID就可以了。
头文件QtTestSetTimer.h:
#pragma once
#include <QtWidgets/QWidget>
#include <QtWidgets/QPushButton>
class QtTestSetTimer : public QWidget
{
Q_OBJECT
public:
QtTestSetTimer(QWidget *parent = Q_NULLPTR);
~QtTestSetTimer();
protected:
void slotChangeTimer(bool bClick);
protected:
QPushButton *m_pChangeTimer = nullptr;
};
QtTestSetTimer.cpp:
#include "QtTestSetTimer.h"
#include <QDebug>
#include <windows.h>
#include <QDateTime>
UINT_PTR g_TimerID = 0;
void __stdcall TimerProc(HWND hwnd, UINT message, UINT_PTR iTimerID, DWORD dwTime)
{
qDebug() << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
}
QtTestSetTimer::QtTestSetTimer(QWidget *parent)
: QWidget(parent)
{
m_pChangeTimer = new QPushButton(this);
m_pChangeTimer->setText("3s");
m_pChangeTimer->setCheckable(true);
connect(m_pChangeTimer, &QPushButton::clicked, this, &QtTestSetTimer::slotChangeTimer);
g_TimerID = ::SetTimer(NULL, 0, 3000, TimerProc);
qDebug() << "Now Timeout 3s:";
}
QtTestSetTimer::~QtTestSetTimer()
{
::KillTimer(NULL, g_TimerID);
g_TimerID = 0;
}
void QtTestSetTimer::slotChangeTimer(bool bClick)
{
if (bClick)
{
m_pChangeTimer->setText("2s");
::SetTimer(NULL, g_TimerID, 2000, TimerProc);
qDebug() << "Now Timeout 2s:";
}
else
{
m_pChangeTimer->setText("3s");
::SetTimer(NULL, g_TimerID, 3000, TimerProc);
qDebug() << "Now Timeout 3s:";
}
}
main.cpp:
#include "QtTestSetTimer.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QtTestSetTimer w;
w.show();
return a.exec();
}
源码下载,源码与上述代码一致(收费):QtTestSetTimer.zip-C++文档类资源-CSDN下载
阿木呀: 那需要在蓝图内进行编辑,在你需要的特定条件下,用整数1整除GetWorldDeltaSeconds(游戏中刷新每帧的时间),得出的结果打印出来即可
2301_80059307: 输入没有显示addItem咋回事,也有头文件
六号跑道01: 稍微补充一下: QMenu* m_menu = new QMenu(this); QAction* m_addAction = new QAction(m_menu); QAction* m_delAction = new QAction(m_menu); m_addAction->setText(QObject::tr("添加")); m_delAction->setText(QObject::tr("删除")); m_addAction->setCheckable(true);//是否可以check m_delAction->setCheckable(true);//是否可以check m_menu->addAction(m_addAction); m_menu->addAction(m_delAction); connect(m_addAction, &QAction::triggered, this, &MainWindow::addFunc); connect(m_delAction, &QAction::triggered, this, &MainWindow::delFunc); QPushButton* m_pushButton = new QPushButton(this); m_pushButton->setText(QObject::tr("测试按钮菜单")); m_pushButton->setMenu(m_menu);//设置菜单 //m_pushButton->setStyleSheet("QPushButton::menu-indicator{image:none;}");//不显示下拉图片[code=cpp] [/code]
六号跑道01: 没实现,不知道我错在哪里
一然明月: 一个编辑器开始地图 一个游戏默认地图 你看看你的游戏默认地图也设置了吗