QT(9.3)定时器,绘制事件

这篇具有很好参考价值的文章主要介绍了QT(9.3)定时器,绘制事件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作业:

自定义一个闹钟

pro文件:

QT       += core gui texttospeech

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    widget.cpp

HEADERS += \
    widget.h

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

头文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>//按钮类
#include <QLineEdit>//行编辑器
#include <QTextEdit>//文本编辑器
#include <QLabel>//标签
#include <QPainter>//画家类
#include <QPaintEvent>//绘制事件
#include <QTime> //时间类
#include <QTimer>//定时器类
#include <QTimerEvent>//定时器事件类
#include <QDateTime>//日期时间类
#include <QTextToSpeech>//文本转语音
#include<QMouseEvent>//鼠标移动事件

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    QLabel *lab1; //实例化一个标签对象
    QLineEdit *edit1;//是实例化一个行编辑器对象
    QPushButton *btn_start,*btn_stop;//实例化开始按钮和停止按钮
    QTextEdit *txtedit;//实例化一个文本编辑器对象
public:
    void btn_start_slot();//自定义开始按钮的槽函数
    void btn_stop_slot();//自定义停止按钮的槽函数
    void paintEvent(QPaintEvent *event) override;//重写绘画事件处理函数
    void timeout_slot();//自定义处理timeout信号的函数
    void mousePressEvent(QMouseEvent *event) override;//鼠标按下事件
    void mouseMoveEvent(QMouseEvent *event) override;//鼠标移动事件
    QString tm;//定义时间字符串
private:
    QTimer *timer;//定义定时器
    QTextToSpeech *speecher;//定义语音播报
    QPoint drap;  //定义z向量

};
#endif // WIDGET_H

自定义函数:
 

#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //设置纯净窗口
    this->setWindowFlag(Qt::FramelessWindowHint);
    //设置窗口大小为一个固定大小
    this -> setFixedSize(700,375);
    //设置窗口透明度
    this -> setWindowOpacity(1);
    //设置边框粗细
    this->setStyleSheet("background-color:skyblue;border:10px solid rgb(0,0,0);border-radius:10px");
    // 创建一个标签,显示时间
    lab1 = new QLabel(this);
    //设置标签大小
    lab1->resize(425,100);
    //设置位置
    lab1->move(25,25);
    //创建一个行编辑器
    edit1 = new QLineEdit(this);
    //设置行编辑器大小
    edit1->resize(200,55);
    //设置行编辑器中字体大小
    edit1->setFont(QFont("微软雅黑",15));
    //设置行编辑器位置
    edit1->move(lab1->x()+450,lab1->y());
    //设置占位文本
    edit1->setPlaceholderText("输入时间00:00:00");
    //创建一个开始按钮
    btn_start = new QPushButton("启动",this);
    //设置按钮大小
    btn_start->resize(90,40);
    //设置按钮位置
    btn_start->move(edit1->x(),edit1->y()+60);
    //创建一个停止按钮
    btn_stop = new QPushButton("停止",this);
    //设置停止按钮为不可用状态
    btn_stop->setEnabled(false);
    //设置按钮大小
    btn_stop->resize(90,40);
    //设置按钮位置
    btn_stop->move(btn_start->x()+110,btn_start->y());
    // 创建一个文本编辑器
    txtedit = new QTextEdit(this);
    //设置文本编辑器大小
    txtedit->resize(650,200);
    //设置文本编辑器的位置
    txtedit->move(lab1->x(),lab1->y()+125);
    //设置文本编辑器内容居中
    txtedit->setAlignment(Qt::AlignCenter);
    //设置文本编辑器文字
    txtedit->setFont(QFont("微软雅黑",20));
    //设置文本编辑器占位符
    txtedit->setPlaceholderText("提示:鼠标左键按住拖动移动,鼠标右键按下窗口关闭。不输入播报默认起床");
    //实例化一个定时器
    timer = new QTimer(this);
    //将该定时器的timeout信号连接到自定义槽函数
    connect(timer,&QTimer::timeout,this,&Widget::timeout_slot);
    //启动定时器
    timer->start(1000);//定时器一秒发送一个信号
    //连接开始按钮和对应槽函数
    connect(this->btn_start,&QPushButton::clicked,this,&Widget::btn_start_slot);
    //连接停止按钮和对应的槽函数
    connect(this->btn_stop,&QPushButton::clicked,this,&Widget::btn_stop_slot);
    //实例化播报员
    speecher = new QTextToSpeech(this);

}
//绘制事件
void Widget::paintEvent(QPaintEvent *event)
{
    //绘制窗口边框
    QPen pen;
    pen.setWidth(15);//设置画笔颜色
    QPainter maliang(this);
    pen.setColor("purple");//设置画笔颜色
    pen.setStyle(Qt::DashLine);//设置画笔的线的形状
    maliang.setPen(pen);
    maliang.drawRect(0,0,this->width(),this->height());//绘制边框
}
//处理信号对应的槽函数
void Widget::timeout_slot()
{
    //调用QTime的静态成员函数获取当前系统时间
    QDateTime sys_time = QDateTime::currentDateTime();
    //将事件展示到label1中
    this->lab1->setText(sys_time.toString("yyyy-MM-dd hh:mm:ss"));
    this->lab1->setAlignment(Qt::AlignCenter);
    this->lab1->setFont(QFont("微软雅黑",25));
    if(sys_time.toString("hh:mm:ss")==tm)
    {
        if(txtedit->toPlainText()==NULL)
        {
                speecher->say("起床起床起床起床起床起床起床起床");
        }
            speecher->say(txtedit->toPlainText());
    }

}
//开始按钮信号对应槽函数
void Widget::btn_start_slot()
{
    this->btn_start->setEnabled(false);//设置开始按钮不可用
    this->edit1->setEnabled(false);//设置输入时间编辑器不可用
    this->txtedit->setEnabled(false);//设置输入提示文本编辑器不可用
    this->btn_stop->setEnabled(true);//设置停止按钮可用
    tm = this->edit1->text();

}

//停止按钮信号对应的槽函数
void Widget::btn_stop_slot()
{
    this->btn_start->setEnabled(true);//设置开始按钮可用
    this->btn_stop->setEnabled(false);//设置结束按钮不可用
    this->edit1->setEnabled(true);//设置输入时间编辑器可用
    this->txtedit->setEnabled(true);//设置输入提示文本编辑器可用
    speecher->stop();
}
void Widget::mousePressEvent(QMouseEvent *event)//鼠标按下事件
{
    if(event->button()==Qt::RightButton)
    {
        this->close();
    }
    drap = event->globalPos() - this->pos(); //相对于整个屏幕,组件左上角到组件中鼠标的向量
}
void Widget::mouseMoveEvent(QMouseEvent *event) //鼠标移动事件
{
    this->move(event->globalPos()-drap);  //将组件移动到新位置,由鼠标所在向量减去组件左上角到鼠标向量
}
Widget::~Widget()
{
}

主函数:

#include "widget.h"

#include <QApplication>

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

运行结果:

QT(9.3)定时器,绘制事件,qt,开发语言,算法,c语言,c++文章来源地址https://www.toymoban.com/news/detail-694735.html

到了这里,关于QT(9.3)定时器,绘制事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt 定时器

    startTimer(); 注意:定时器参数要是全局或者静态变量。   没有结束函数 int timerId=startTimer(); startTimer()返回定时器标志 需设置为类的成员--类内使用 通过定时器事件判断   QTimer类事件间隔到达 QTimer不需要ID,只需要对象不同就可以区别定时器。 start() stop()     timer=new QTimer(thi

    2024年02月09日
    浏览(41)
  • QT学习之定时器

    一、定时器 第一种方式: 1 利用事件 void timerEvent ( QTimerEvent * ev) 2 启动定时器 startTimer( 1000) 毫秒单位 3 timerEvent 的返回值是定时器的唯一标示 可以和ev-timerid 做比较 第二种方式: 1 利用定时器类 QTimer 2 创建定时器对象 QTimer * timer = new QTimer(this) 3 启动定时器 timer-start(毫秒)

    2024年02月16日
    浏览(44)
  • Qt学习(一)-------- 定时器、绘图

    1.定时器 QTimer    ⭐  创建定时器对象  QTimer *timer = new QTimer(this);    ⭐ 启动定时器 timer-start(毫秒);    ⭐ 监听信号 connect(timer,QTimer::timeout,[=](){     }); -----------------------------------------------------------例子-----------------------------------------------------------     ⭐ 点击暂停,实现

    2024年02月03日
    浏览(42)
  • 【QT】时间日期与定时器

    目录 1.时间日期相关的类 2.日期时间数据与字符串之间的转换 2.1 时间、日期编辑器属性设置 2.2 日期时间数据的获取与转换为字符串 2.3 字符串转换为日期时间 3.QCaIendarWidget日历组件 3.1基本属性 3.2 公共函数 3.3 信号 4.实例程序演示时间日期与定时器的使用 时间日期是经常

    2024年02月04日
    浏览(49)
  • 【QT】——定时器QTimer的使用

    目录 常见的函数 构造函数 获取/设置定时器间隔时间 启动/停止定时器  信号 设置定时器的时间的两种方法 设置定时器精度 其他函数 静态函数 实例 QTimer是QT框架中的定时器类型,它的使用方法如下: 定义一个调用QTimer对象,调用start()函数启动定时器,则 定时器则会周期

    2024年02月12日
    浏览(41)
  • 二、Qt定时器与文本编辑器制作《QT 入门到实战》

    了解 qt 的 pixmap 了解 qt 的 label 如何显示图片 了解定时器的开启 了解定时器的关闭 了解文件如何进行读取 了解 QFileDialog 的使用 了解了一个文本编辑器的基本编写 巩固了 connect 的使用 在 Qt 中使用 Label 可以显示文本,但 Label 不止可以显示文本,还可以用于图片的显示。 首

    2024年02月02日
    浏览(45)
  • qt学习:QTimer定时器+重复计时+单次计时

    在指定的间隔时间会发送出一个timeout信号,关联对应的槽函数 #includeQTimer

    2024年01月19日
    浏览(63)
  • 定时器/事件

    网页中经常会需要:每隔一段时间需要 自动 执行一段代码,不需要我们手动去触发 ----- 定时器函数 比如:网页中得倒计时 定时器函数有两种: 间隔函数 和 延迟函数 间隔函数 作用:每隔指定的时间 自动重复执行某些代码 定时器函数可以 开启 和 关闭 定时器 开启定时器

    2024年02月11日
    浏览(47)
  • 对定时器中影子寄存器以及更新操作和更新事件理解

    本人是stm32初学者,近期在看定时器参考文档时遇到些阻碍,再参考了众多CSDN博主的文章后,得到了一些个人理解,将其发布出来,本文也对一些参考的文章进行了不少复制粘贴同时也在这些文章必要位置加入了个人看法,文章链接附在最后 由于本人是初学者,本文一定存在

    2024年02月05日
    浏览(42)
  • 自定义循环队列、软件定时器、事件集,实用嵌入式代码库

    本篇博文分享一个很实用的嵌入式代码库。 它可灵活应用到有无RTOS的程序中,采用C语言面向对象的思路实现各个功能,尽可能最大化的复用代码,目前为止工具包包含: 循环队列、软件定时器、事件集 。 网址:https://download.csdn.net/download/m0_38106923/87765476?spm=1001.2014.3001.550

    2024年02月03日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包