QT 第四天

2023-11-17

一、设置一个闹钟

.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

.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLabel>    //标签
#include <QLineEdit> //行编辑器
#include <QPushButton>//按钮
#include <QTextEdit>  //文本编辑器
#include <QTextToSpeech>  //文本转语音的头文件
#include <QTimer>   //定时器类的头文件
#include <QTime>    //时间类
#include <QTimerEvent>//定时器时间处理类
#include <QDateTime>  //日期时间类

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    //声明定时器事件处理函数
    void timerEvent(QTimerEvent *e)override;

private slots:
    void on_btn1_clicked();//启动按钮的槽函数
    void on_btn2_clicked();//结束按钮的槽函数

private:
    Ui::Widget *ui;
    //定义一个播报员指针
    QTextToSpeech *speechr;

    //定义一个定时器指针
    QTimer *time;

    //定义一个定时器标识
    int tid;

    QPushButton *btn1;
    QTextEdit *txt1;
    QPushButton *btn2;
    QLineEdit *edit1;
    QLabel *lab1;
};
#endif // WIDGET_H

.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //实例化一个标签,设置为当前时间
    lab1 = new QLabel(" ",this);
    lab1 -> resize(400,150);//设置大小
    lab1->move(60,50);
    lab1->setStyleSheet("background-color:pink");//设置背景颜色
    lab1->setScaledContents(true);//设置内容自适应

    //实例化一个文本编辑器,设置为定的时间
    edit1 = new QLineEdit(this);
    edit1->setText("请输入>>>");    //设置编辑器中的文本内容
    edit1->setPlaceholderText("");   //设置编辑器的占位文本
    edit1->resize(250,75);      //设置尺寸
    edit1->move(lab1->x()+450,50);//移动位置
    edit1->setStyleSheet("background-color:pink");
    edit1->setEnabled(true);   //设置不可用状态4

    //实例化一个按钮,用作启动时间
    btn1 = new QPushButton(this);  //将当前界面设置成父组件
    btn1->setText("启动");
    btn1->resize(120,70);    //设置按钮大小
    btn1->setStyleSheet("background-color:pink");//设置背景颜色
    btn1->move(edit1->x(),edit1->y()+85);
    btn1->setEnabled(true);    //设置是否可用

    //实例化一个按钮,用作结束时间
    btn2 = new QPushButton(this);  //将当前界面设置成父组件
    btn2->setText("停止");
    btn2->resize(120,70);    //设置按钮大小
    btn2->setStyleSheet("background-color:pink");//设置背景颜色
    btn2->move(btn1->x()+130,btn1->y());
    btn2->setEnabled(true);    //设置是否可用

    //实例化一个文本编辑器,播报当定的时间与当前时间相同时的内容
    txt1 = new QTextEdit(this);
    txt1->setText("易烊千玺来叫你起床啦!!!");
    txt1->resize(700,300);
    txt1->setStyleSheet("background-color:pink");//设置背景颜色
    txt1->move(60,lab1->y()+200);

    //给播报员实例化一个空间
    speechr = new QTextToSpeech(this);

    //启动定时器
    tid = this->startTimer(0);  //每隔0秒调用timerEvent函数

    connect(btn1,&QPushButton::clicked,this,&Widget::on_btn1_clicked);   //启动按钮连接槽函数
    connect(btn2,&QPushButton::clicked,this,&Widget::on_btn2_clicked);   //启动按钮连接槽函数
}

Widget::~Widget()
{
    delete ui;
}
//定时器闹钟启动按钮
void Widget::on_btn1_clicked()
{
    //启动按钮禁用
    this->btn1->setEnabled(false);

    //将文本编辑器禁用
    this->txt1->setEnabled(false);

    //关闭按钮开启
    this->btn2->setEnabled(true);
}
//定时器闹钟关闭按钮
void Widget::on_btn2_clicked()
{
    //启动按钮开启
    this->btn2->setEnabled(false);

    //将文本编辑器禁用
    this->txt1->setEnabled(true);

    //关闭按钮关闭
    this->btn1->setEnabled(true);
}
//定时器事件处理函数
void Widget::timerEvent(QTimerEvent *e)
{
    QDateTime sys_time = QDateTime::currentDateTime();  //获取系统当前的日期时间
    this->lab1->setText(sys_time.toString("yyyy-MM-dd-hh:mm:ss"));//将时间展示到lab1界面
    QString t = sys_time.toString("hh:mm:ss");
    this->lab1->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//设置lab1中的内容居中显示

    if(t == this->edit1->text() && this->btn1->isEnabled()== false)
    {
        speechr->say(this->txt1->toPlainText());
    }
    else if(this->btn1->isEnabled()== true)
    {
        speechr->stop();
    }
}

二、使用绘制事件完成钟表的实现

QT       += core gui

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

FORMS += \
    widget.ui

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

.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QPaintEvent>
#include<QTimer>
#include<QPainter>
#include<QPen>
#include<QBrush>
#include<QTime>
#include<QDebug>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(int width, int height,QWidget *parent = nullptr);
    ~Widget();

    void paintEvent(QPaintEvent *event);

private:
    Ui::Widget *ui;

    QTimer *timer;

    int count = 0;

    int hour;
    int minute ;
    int second ;
};
#endif // WIDGET_H

main.cpp

#include "widget.h"

#include <QApplication>

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

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(int width, int height,QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setFixedSize(width, height);

    timer = new QTimer;
    timer->start(1000);

    connect(timer, &QTimer::timeout, [&](){
        count++;
        update();
    });

    //获取系统时间
    QString t = QTime::currentTime().toString("h:m:s ap");

    //qDebug()<<t<<"   "<<t[0]<<" "<<t[2];
    QStringList list1 = t.split(" ");
//    for(int i=0; i<list1.size(); i++)
//    {
//        qDebug()<<list1.at(i);
//    }

    QStringList list2 = list1[0].split(":");
    for(int i=0; i<list2.size(); i++)
    {
        qDebug()<<list2.at(i);
    }

    hour = list2[0].toUInt();
    minute = list2[1].toUInt();
    second = list2[2].toUInt();
    qDebug()<<"hour:"<<hour<<" minute:"<<minute<<"  second:"<<second;

}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{
    //定义画家类绘制圆
    QPainter p(this);
    QPen pen(QColor("purple"));
    pen.setWidth(3);
    QBrush b("pink");
    p.setPen(pen);
    p.setBrush(b);

    p.translate(this->width()/2,this->height()/2);
    p.drawEllipse(QPoint(0,0), 200,200);

    //使用画家类绘制刻度
    pen.setColor(QColor("black"));
    p.setPen(pen);
    for(int i=0; i<60; i++)
    {
        p.rotate(6);
        p.drawLine(QPoint(200,0), QPoint(195,0));

    }

    pen.setWidth(5);
    p.setPen(pen);
    for(int i=0; i<12; i++)
    {

        p.drawLine(QPoint(200,0), QPoint(190,0));
        p.rotate(30);
        p.drawText(QPoint(0, -170),QString("%1").arg(i+1));


    }
    //制作时针
    pen.setWidth(10);
    pen.setColor(QColor("red"));
    p.setPen(pen);
    p.rotate(hour*30+6*second/60/12+30*minute/60+6*count/60/12);       //6*count/60/12+
    p.drawLine(QPoint(0,-50), QPoint(0, 5));

    //制作分针
    QPainter p1(this);
    p1.translate(this->width()/2,this->height()/2);
    pen.setWidth(6);
    pen.setColor(QColor("blue"));
    p1.setPen(pen);
    p1.rotate(6*count/60+minute*6+6*second/60);
    p1.drawLine(QPoint(0,-80), QPoint(0, 8));

    //制作秒针
    QPainter p2(this);
    p2.translate(this->width()/2,this->height()/2);
    pen.setWidth(3);
    pen.setColor(QColor("green"));
    p2.setPen(pen);
    p2.rotate(6*count+second*6);
    p2.drawLine(QPoint(0,-120), QPoint(0, 12));
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT 第四天 的相关文章

随机推荐

  • 【华为OD统一考试B卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • from: can't read /var/mail/xxx 解决方法

    在执行一个发包脚本的时候 遇到了如下问题 from can t read var mail scapy all 原因 脚本是没有问题的 但它并不是可以被python执行的可执行文件 解决方法 1 使用python 脚本名字 命令执行脚本 2
  • k210自学快速入门(附网址)

    一 获得下载工具IDE https dl sipeed com MAIX MaixPy ide 安装和配置见该博客 http t csdn cn 464lj 二 下载固件 1 用于程序的执行下载站 Sipeed 注意 minimum是最小版
  • sqlalchemy create_engine关于连接池的几个参数

    pool size 设置连接池中 保持的连接数 初始化时 并不产生连接 只有慢慢需要连接时 才会产生连接 例如我们的连接数设置成pool size 10 如果我们的并发量一直最高是5 那么我们的连接池里的连接数也就是5 当我们有一次并发量达
  • 级联菜单的动态实现(数据库绑定)

    效果预览 数据库设计 第一类型 第二类型 第三类型 Controller层代码 RequestMapping noFilterGetAllInfo public void noFilterGetAllInfo Integer firstSe
  • 【调试经验】MySQL - fatal error: mysql/mysql.h: 没有那个文件或目录

    机器环境 Ubuntu 22 04 3 LTS 报错问题 在编译一个项目时出现了一段SQL报错 CGImysql sql connection pool cpp 1 10 fatal error mysql mysql h 没有那个文件或目
  • python推荐系统学习笔记(5)——基于图的模型推荐算法

    python推荐系统学习笔记 5 基于图的模型推荐算法 2 1 用户行为数据的二分图表示 为可以把基于邻域的模型看作基于图的模型的简单形式 用户物品二分图模型 对于数据集中每一个二元组 u i 图中都有一套对应的边e vu vi 其中vu属
  • java listnode 合并链表_java实现链表合并

    输入两个单调递增的链表 输出两个链表合成后的链表 当然我们需要合成后的链表满足单调不减规则 最容易想到的就是新建一个链表 一个一个将节点连接到新链表中 代码 public ListNode Merge ListNode list1 List
  • Linux C/C++解析xls

    libxls作为开源库 支持在Linux C C 环境下解析 读 xls文件 github提供了源码 https github com libxls libxls 但是github的源码需要一堆辅助工具 才能够编译出libxls的C静态库
  • C++中while循环中cin语句被跳过问题解析

    今天在写代码的时候 遇到了一个非常奇怪的问题 while true int select cout lt lt 请输入查找的方式 lt lt endl cout lt lt 1 按职工编号查找 lt lt endl cout lt lt 2
  • 学习数据数据结构的意义

    来源 我是码农 转载请保留出处和链接 本文链接 http www 54manong com id 18 什么是数据结构 为什么要学习数据结构 数据结构是否是一门纯数学课程 它在专业课程体系中起什么样的作用 我们要怎么才能学好数据结构 相信同
  • TCP建立连接三次握手和释放连接四次握手

    TCP建立连接三次握手和释放连接四次握手 尊重原创 转载请注明出处 http blog csdn net guyuealian article details 52535294 在谈及TCP建立连接和释放连接过程 先来简单认识一下TCP报文
  • 哪里期货开户低手续费高交返

    国内商品期货开户流程和股票开户的流程很像似 没有开过期货户的 想要开期货户只需要知道这个就行了 可以考虑传统方式去营业部线下开户 但是线下开户弊端手续费较高 地区性垄断 前些年网上开户还没普及时 基本都采用线下开户的方式 随着互联网时代的到
  • QTextCodec中的setCodecForTr等终于消失了 (Qt5)

    在Qt4中 国内很多新手都喜欢 不分青红皂白地使用如下3行代码 QTextCodec setCodecForTr QTextCodec setCodecForCStrings QTextCodec setCodecForLocale 尽管之
  • C++设计模式——单例模式

    我们应该知道 C 中有21种设计模式 常见的有单例模式 迭代器模式 工厂模式 抽象工厂模式 观察者模式 今天我们先来说一下单例模式 单例模式 Singleton 是设计模式中最为简单 最为常见 最容易实现的模式 单例模式就是怎样去创建一个唯
  • 基于Simulink的BPSK调制通信系统建模和仿真

    基于Simulink的BPSK调制通信系统建模和仿真 本文将介绍如何使用Matlab的Simulink工具进行BPSK调制通信系统的建模和仿真 BPSK Binary Phase Shift Keying 是一种常用的数字调制技术 适用于低
  • python的ndarray、series和dataframe类型转化

    文章目录 创建ndarray类型数据 使用list创建series series和ndarray转化 series转换为ndarray ndarray转换为series 使用list创建dataframe pd DataFrame 将nda
  • 因果推断-【The MineThatData E-Mail Analytics And Data Mining Challenge】思路分析与Python实现代码

    目录 一 数据集介绍 二 问题及分析思路 1 问题 2 分析思路 三 代码 一 数据集介绍 数据集来源于用户在网上的购物行为 涵盖了过去一年有购买行为的64000个用户 这些用户被用于电子邮件营销活动的实验分析 实验的目的是衡量哪个版本的电
  • 责任中心(成本中心、利润中心、收入中心、费用中心和投资中心)

    转帖自智库百科 http wiki mbalib com 责任中心 出自MBA智库百科 http wiki mbalib com 责任中心 Responsibility Center 目录 隐藏 1 什么是责任中心 2 责任中心的特征 3
  • QT 第四天

    一 设置一个闹钟 pro QT core gui texttospeech greaterThan QT MAJOR VERSION 4 QT widgets CONFIG c 11 The following define makes y