首页 > 其他分享 >QT学习笔记-QTimer

QT学习笔记-QTimer

时间:2023-12-05 22:35:36浏览次数:33  
标签:QT text 笔记 ui time Home include QTimer

官方解释:

The QTimer class provides repetitive and single-shot timers

这个类提供了可重复的和单次的定时器。

QTimer类为定时器提供了高级编程接口。

使用:

  1. 创建一个QTimer
  2. 将timeout()信号连接到适当的槽,然后调用start()。
  3. 完成1,2步后,它会以恒定的时间间隔发出timeout()信号。

例如:

QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &Home::func());
timer->start(1000);

从start()后,每秒都会调用槽update()

简单实例,【倒计时软件】

image

头文件:

#ifndef HOME_H
#define HOME_H

#include <QWidget>
#include <QTimer>
#include <QDebug>
#include <QString>
#include <string>
#include <thread>

QT_BEGIN_NAMESPACE
namespace Ui { class Home; }
QT_END_NAMESPACE

class Home : public QWidget
{
    Q_OBJECT

public:
    Home(QWidget *parent = nullptr);
    ~Home();
    void changeText();  // 修改显示的文本信息
    void startCountDown();  // 开始倒计时
    void text();  // 将输入框的数值显示
private:
    Ui::Home *ui;
    QTimer *time;
    bool isActive;  // 用来保存倒计时工具状态
    int seconds;  // 用来保存倒数时间
};
#endif // HOME_H

cpp文件:

#include "home.h"
#include "./ui_home.h"
#include <QMessageBox>

Home::Home(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Home)
{
    ui->setupUi(this);
    QLineEdit *line = ui->input;
    time = new QTimer(this);
    this->setWindowTitle("Jev_0987:倒计时软件");
    line->setPlaceholderText("10");
    line->setMaxLength(4);
    line->setText("0");
    Home::isActive = false;  // 用来确认当前是否已经开始倒计时了
    connect(ui->input, &QLineEdit::textEdited, this, &Home::text);
    connect(ui->button, &QPushButton::clicked, this, &Home::startCountDown);
    connect(time, &QTimer::timeout, this, &Home::changeText);  // 绑定定时器信号
}

void Home::startCountDown(){
    bool ok;
    int newSeconds = ui->input->text().toInt(&ok);
    qDebug()<<"点击按钮";
    if(ok)
    {
        ui->distplay->setText(QString::number(newSeconds));
        if(isActive)
        {
            // 上一个倒计时还没结束
            time->stop();
            isActive = false;
            qDebug()<<"关闭上一个定时器";
        }
        seconds = newSeconds;
        qDebug() << "startCountDown" << seconds;
        isActive = true;
        time->start(1000);
    }else
    {
        qDebug() << "数据类型转换失败";
    }
}

void Home::changeText()
{
    qDebug()<< "changeText: " <<seconds;
    seconds--;
    ui->distplay->setText(QString::number(seconds));
    if(seconds <= 0)
    {
        qDebug() << "时间到" << seconds;
        ui->distplay->setText("时间到");
        time->stop();
        isActive = false;
    }
}

void Home::text()
{
    ui->distplay->setText(ui->input->text());
}
Home::~Home()
{
    delete ui;
    delete time;
}

main文件:

#include "home.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Home w;
    w.show();
    return a.exec();
}

image

总结遇到的问题:
(1)定时器信号连接的函数写到了button的槽函数当中,造成了多次绑定定时器信号。
(2)处理重复点击同个按钮恢复状态。

标签:QT,text,笔记,ui,time,Home,include,QTimer
From: https://www.cnblogs.com/jev-0987/p/17878464.html

相关文章

  • 重构笔记3
    代码的坏味道本书之中的核心之一:简单来说就是碰到什么样子的代码,你就需要警惕起来,需要进行重构了!本文章中主要分成三部分进行描述,第一部分为名字就是它的术语,第二部分为详解:它的描述及一些实际场景,第三部分重构:就是他的参考重构手法,但这些手法仅作为参考,有时我们可能会需要更多的......
  • 12.5每日总结(阅读笔记7)
     《梦断代码》中对软件工程所面临的种种困难与艰难的描述,很符合当下编程工作,自己对于软件编程也有切身感受。正如一队人马并肩扛起代码大石,虽历经磨难仍欲将其推上山顶的故事。正是这种磨砺与艰难的爬山过坎,成就了各种各样的运行的软件,构成了一个五彩缤纷的虚拟世界。    ......
  • 《需求分析与系统设计》阅读笔记三
    软件需求分析中不可或缺的一步就是可视化建模,因为参与软件开发的人员不可能都是程序员,肯定还有相关项目的业界人士参与进来,这时候让他们直接去理解代码显然是不现实的,因此我们需要用到可视化建模,目前我们最熟悉的可视化建模语言莫过于UML了,这也是我们在大学内特地开设课程教授的语......
  • 12/5学习笔记
    今天学习了注意力机制什么是注意力首先,心理学上,作为动物,想要在复杂环境下关注到需要关注的事物,机制是根据随意线索和不随意线索选择注意点随意与不随意实际上是遂意与不遂意,也就是是否受控例如这里的在环境中看到红色杯子,是因为杯子颜色鲜艳,会让人第一眼看到,这是不需要遂意的,而想......
  • 第三阶段前端随手笔记
    1.let细节注意直接输出x,会报错!在输出语句后面使用var定义变量x,会变量提升,输出undefined      2Vue笔记1控制台直接使用vm对象<!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <title>vue快速入门</title><......
  • SSM整合项目随手笔记
    1通过cmd控制台启动的vue项目关闭方法启动vue项目按给出指令执行即可cmd控制台关闭vue项目输入CTRL+C 2如果无意间点了Addel...意思是idea识别不到这个标签添加el...到自定义html标签 将其从自定义标签库删除操作方法是InSettings|Editor|In......
  • Springmvc随手笔记
    0报错问题1tomcat运行中IDEA异常关闭解决方法:重启电脑tomcat运行中IDEA异常关闭,再次启动tomcat会报告端口占用,打开任务管理器关闭一个java.exetomcat可以正常启动但是debug任然提示端口被占用Errorrunning'Tomcat8.0.50-springmvc':Unabletoopendebuggerport......
  • Qt 项目打包成exe可执行程序
    1、先构建release2、删掉文件夹内多余的文件3、使用windeployqt工具再打包就可以了......
  • openGauss学习笔记-143 openGauss 数据库运维-例行维护-数据安全维护建议
    openGauss学习笔记-143openGauss数据库运维-例行维护-数据安全维护建议为保证openGauss数据库中的数据安全,避免丢失数据、非法访问数据等事故发生,请仔细阅读以下内容。143.1避免数据被丢失建议用户规划周期性的物理备份,且对备份文件进行可靠的保存。在系统发生严重错误的情况......
  • HTML学习笔记四:html-body-行内元素
    HTML学习笔记四:body元素行内元素MDN元素查询地址所有的html的元素我们都可以通过以下地址进行相关的查询和理解。https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/metabody中元素分类块级元素行内元素行内元素行内元素区别于块级元素,不会独占一行,一个行内元......