QT 第四天

news2025/2/27 16:41:52

一、设置一个闹钟

.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));
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/981607.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RHCE——十八、shell编程之sed

RHCE 一、概念工作原理 二、基本语法1、格式2、参数3、定址符4、操作 三、输出文本范例文件 四、文本替换1、范例文件2、格式3、示例4、使用替换实现删除 五、删除文本1、注意2、示例 六、插入文本1、注意2、格式3、示例4、注意 七、练习 一、概念 sed命令是一个非交互式的文本…

[keil] uv编译分析

假设Keil安装路径: C:\Keil_v5\ 假设工程在 d:\HELLO , 工程Targets名:Simulator [在Manage Project Items中可修改] 如下指令为:Build(F7) C:\Keil_v5\UV4\UV4.exe -b d:\HELLO\Hello.uvproj -j0 -t Simulator -o d:\HELLO\uv4.log 如下指令为:Rebuild(CtrlAltF7) C:\Kei…

PEX装机

目录 一、PXE是什么&#xff1f; 二、PXE的组件&#xff1a; vsftpd/httpd/nfs tftp dhcp 三、配置vsftpd 四、配置tftp 1.安装tftp-server 2.启动tftp 五、准备pxelinx.0文件、引导文件、内核文件 1.准备pxelinux.0文件 2.准备引导文件、内核文件 六、配置dhcp …

【基础建设】浅谈企业网络安全运营体系建设

引言 在网络安全环境复杂又严峻的当前&#xff0c;国内各大企业已开始组建自己的网络安全团队&#xff0c;加强企业自身安全能力建设&#xff0c;朝着网络安全运营一体化迈进。但企业安全运营也已逐步从被动式转变为主动式&#xff0c;成为将人、管理与技术结合&#xff0c;全…

C高级day1 shell 指令的补充学习

使用cut截取出Ubuntu用户的家目录&#xff0c;要求&#xff1a;不能使用":"作为分割 2.思维导图

【WPF C#】PorphyStruct类卟啉和类咕啉的结构分析

前言 首先&#xff0c;热烈祝贺家姐申请到了国家自然科学基金&#xff08;8月底&#xff09;&#xff0c;找一些化学领域的程序和软件&#xff0c;助我姐一臂之力&#xff0c;顺便自己研究一下源码。 卟啉类化合物的结构分析 PorphyStruct&#xff0c;一种用于分析不同卟啉类非…

tlog实现链路追踪

tlog实现链路追踪 TLog通过对日志打标签完成企业级微服务的日志追踪。它不收集日志&#xff0c;使用简单&#xff0c; 产生全局唯一追踪码。除了追踪码&#xff0c;TLog还支持SpanId和上下游服务信息 标签的追加。你还可以自定义方法级别的标签&#xff0c;让日志的定位轻而易…

春秋云镜 CVE-2017-5638

春秋云镜 CVE-2017-5638 S2-045/S2-046 靶标介绍 2.3.32 之前的 Apache Struts 2 2.3.x 和 2.5.10.1 之前的 2.5.x 中的 Jakarta Multipart 解析器在文件上传尝试期间具有不正确的异常处理和错误消息生成&#xff0c;这允许远程攻击者通过精心制作的内容执行任意命令-Type、C…

Mysql 流程控制

简介 我们可以在存储过程和函数中实现比较复杂的业务逻辑&#xff0c;但是需要对应的流程控制语句来控制&#xff0c;就像Java中分支和循环语句一样&#xff0c;在MySQL中也提供了对应的语句&#xff0c;接下来就详细的介绍下。 1.分支结构 1.1 IF语句 IF 表达式1 THEN 操作1…

亚信科技AntDB数据库携“U8C+AntDB联合产品”亮相“2023全球商业创新大会”,开启生态合作新篇章

8月18-19日&#xff0c;近万人齐聚上海国家会展中心&#xff0c;带着对数字化、数智化趋势和热点的关注&#xff0c;以满腹热情投身到以“数据驱动 智能运营”为主题的“2023全球商业创新大会”&#xff0c;共商新技术条件下企业信息化出现的新课题、新挑战&#xff0c;共享数智…

【MQTT接收数据写入数据库】

MQTT接收数据写入数据库 1.搭建MQTT服务器 参考上一篇文章 2.安装数据库mysql sudo apt update sudo apt install mysql-server创建一个数据库和数据表存储mqtt消息 首先&#xff0c;登录到MySQL服务器&#xff1a; mysql -u root -p输入你的root用户密码。默认root 3.创…

Json字符串内容比较-超实用版

背景 之前有类似接口diff对比&#xff0c;数据对比的测试需求&#xff0c;涉及到json格式的数据对比&#xff0c;调研了几个大神们分享的代码&#xff0c;选了一个最符合自己需求的研究了下。 说明 这个对比方法&#xff0c;支持JsonObject和JsonArray类型的数据对比&#x…

攻防世界-crypto-工业协议分析2

打开附件得到 尝试直接搜索flag关键字&#xff0c;未果 发现存在关于ARP、UDP、SNA协议的流量包&#xff0c;仔细分析后发现大量的UDP包大小都一样&#xff0c;只有少量的是不同的&#xff0c;一个一个找下去&#xff0c;发现如下包有异常字符&#xff1a; 提取字符串&#xff…

MyBatis: 向oracle表中插入null字段的处理

一、可以在SQL中指定类型&#xff1a; Insert("insert into student values(#{name},#{age})")二、可以进行全局配置&#xff08;单独使用MyBatis时可如下配置&#xff09; 如果不进行配置&#xff0c;将报错

移动安全测试框架-MobSF WINDOWS 环境搭建

安装python python-3.11.5-amd64.exe 安装Win64OpenSSL-3_1_2.exe 安装VisualStudioSetup.exe github下载安装包 https://github.com/MobSF/Mobile-Security-Framework-MobSF/archive/refs/heads/master.zip GitHub - MobSF/Mobile-Security-Framework-MobSF: Mobile Secur…

【Apollo】自动驾驶技术的介绍

阿波罗是百度发布的名为“Apollo&#xff08;阿波罗&#xff09;”的向汽车行业及自动驾驶领域的合作伙伴提供的软件平台。 帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统&#xff0c;快速搭建一套属于自己的自动驾驶系统。 百度开放此项计划旨在建立一个以合作为中…

2023年软件测试常见面试题

测试花费的成本&#xff0c;要深入在那个环节上&#xff0c;&#xff08;前提准备上&#xff0c;需求理解上&#xff0c;业务逻辑&#xff0c;排错上&#xff0c;业务名词上理解&#xff0c;通过什么样的方法&#xff0c;有谁能解决这样的问题&#xff09; 软性热身题 1.自我…

Matlab图像处理-高斯低通滤波器

高通滤波 图像的边缘、细节主要位于高频部分&#xff0c;而图像的模糊是由于高频成分比较弱产生的。高通滤波就是为了高消除模糊&#xff0c;突出边缘。因此采用高通滤波器让高频成分通过&#xff0c;消除低频噪声成分削弱&#xff0c;再经傅里叶逆变换得到边缘锐化的图像。 …

C语言基础(下)

结构体 结构体类型的声明 结构体是一些值得集合&#xff0c;这些值称为成员变量。结构体得每个成员可以是不同类型得变量。 语法&#xff1a;struct tag{member-list;}variable-list;创建方法一&#xff1a;&#xff08;普通创建&#xff09; struct Stu {char name[20];char…

在Windows配置PPPoE连接

PPPoE&#xff08;Point-to-Point Protocol over Ethernet&#xff09;是一种常用的网络接入方式&#xff0c;广泛应用于家庭宽带、企业互联网等场景。本文将为您提供详细步骤和示例来指导如何在Windows操作系统上进行PPPoE连接的设置与配置。 1. 打开网络和共享中心 首先&…