2025.2.11

1> 制作一个闹钟软件

.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QTime>
#include <QTimer>
#include <QTimeEdit>
#include <QDateEdit>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Widget *ui;
    QPushButton *btn1;
    QPushButton *btn2;
    QLabel *lab;
    QLineEdit *edit;
    QTimer *timer;
    QTimeEdit *timeedit;
    QTime alarmTime;
    bool alarmSet;
private slots:
    void update_slot();
    void setAlarm_slot();
    void cancel_slot();
};
#endif // WIDGET_H

.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QTime>
#include <QTimer>
#include <string>
#include <QMessageBox>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    setFixedSize(800,400);

    //创建垂直布局

    //获取标签
    QLabel *lab = new QLabel(this);
    lab->setGeometry(80,50,200,50);
    lab->setStyleSheet(
        "border: 2px solid black;"      // 黑色边框,宽度为2px
        "border-radius: 5px;"           // 边框圆角,值越大圆角越明显
        "background-color: lightgray;"  // 背景颜色
        "font: 16px Arial;"             // 字体和大小
    );
    QLabel *lab1 = new QLabel(this);
    lab1->setGeometry(30,180,740,220);
    lab1->setStyleSheet(
        "border: 2px solid black;"      // 黑色边框,宽度为2px
        "border-radius: 5px;"           // 边框圆角,值越大圆角越明显
        "background-color: lightgray;"  // 背景颜色
        "font: 16px Arial;"             // 字体和大小
    );
    // 设置标签的文本内容
    QString motivationalText = "三更灯火五更鸡,\n正是男儿读书时,\n黑发不知勤学早,\n白手方悔读书迟。";

    // 设置文本对齐方式,居中显示
    lab1->setText(motivationalText);
    lab1->setAlignment(Qt::AlignCenter);  // 设置文本居中

    //创建时间选择器
    timeedit = new QTimeEdit(this);
    timeedit->setGeometry(450,50,250,50);
    timeedit->setDisplayFormat("HH:mm:ss");
    timeedit->setTime(QTime::currentTime());

    //设置按钮
    btn1 = new QPushButton(this);//启动
    btn2 = new QPushButton(this);//取消
    btn1->setGeometry(450,110,65,30);
    btn2->setGeometry(600,110,65,30);
    btn1->setText("启动");
    btn2->setText("取消");

    //获取系统当前的时间
    QTime sysTime = QTime::currentTime();
    //将时间转化为字符串
    QString t = sysTime.toString("hh:mm:ss");
    lab->setText(t);

    //创建定时器
    timer = new QTimer(this);
    connect(timer,&QTimer::timeout,this,&Widget::update_slot);
    //启动定时器
    timer->start(1000);

    //连接按钮点击事件
    connect(btn1,&QPushButton::clicked,this,&Widget::setAlarm_slot);
    connect(btn2,&QPushButton::clicked,this,&Widget::cancel_slot);

    //初始化闹钟
    alarmSet = false;

}


void Widget::update_slot()
{

    //每秒获取当前时间并更新
    //获取系统当前的时间
    QTime sysTime = QTime::currentTime();
    //将时间转化为字符串
    QString t = sysTime.toString("hh:mm:ss");
    // 获取父类窗口中的lab标签,并更新文本
       QLabel *lab = findChild<QLabel *>();
       if (lab)
       {
           lab->setText(t);
       }
      //判断闹钟
       if(alarmSet && sysTime >= alarmTime )
       {
           QMessageBox::information(this,"闹钟","时间到");
           alarmSet = false;
       }
}

Widget::~Widget()
{
    delete ui;
}
//设置
void Widget::setAlarm_slot()
{
    //获取设置的闹钟时间
    alarmTime = timeedit->time();
    //启动闹钟
    if(!alarmSet)
    {
        alarmSet = true;
        QMessageBox::information(this, "闹钟", "闹钟已启动");

    }else
    {
        QMessageBox::information(this, "闹钟", "无法重复设置");
    }
}
//取消
void Widget::cancel_slot()
{
    //timer->stop();
        alarmSet = false;
        QMessageBox::information(this, "闹钟取消", "闹钟已取消");
}

3> 将网络聊天室服务器端,重新实现一遍

.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTcpServer>          //服务器类
#include <QTcpSocket>          //客户端类
#include <QVector>             //动态数组类
#include <QMessageBox>
#include <QDebug>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_startbtn_clicked();
    void newConnect_slot();
    void readyRead_slot();
private:
    Ui::Widget *ui;
    QTcpServer *server;
    QVector<QTcpSocket*> client_vector;
};
#endif // WIDGET_H

.cpp

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //实例化一个服务器对象
    server = new QTcpServer(this);
    //将服务器的newConnect信号连接到自定义的槽函数中
    connect(server,&QTcpServer::newConnection,this,&Widget::newConnect_slot);
}

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

void Widget::on_startbtn_clicked()
{
    quint16 port = ui->portedit->text().toUInt();
    //启动服务器
    //函数原型:bool listen(const)
    if(server->listen(QHostAddress::Any,port))
    {
        QMessageBox::information(this,"提示","服务器打开成功");
    }else
    {
        QMessageBox::information(this,"提示","服务器打开失败");
        return;
    }
}
//newConnect对应槽函数的实现
void Widget::newConnect_slot()
{
    qDebug()<<"有新的客户端连接成功";

    //获取最新连接的客户端套接字
    QTcpSocket *s = server->nextPendingConnection();
    //QString msg = "我是zpp";
    //s->write(msg.toLocal8Bit());
    //将客户端套接字放入到客户端容器中
    client_vector.push_back(s);

    //此时就可以完成一个服务器对应多个客户端
    //如果此时,当前客户端有消息发送到服务器中,那么该客户端会自动发送一个readyread信号
    //我们可以将该信号连接到自定义的槽函数中执行相关逻辑
    connect(s,&QTcpSocket::thread,this,&Widget::readyRead_slot);
}

//readyRead信号对应的槽函数
void Widget::readyRead_slot()
{
    //判断是哪个客户端发来消息
    for(int i=0;i<client_vector.size();i++)
    {
        //client_vector[i],表示的是任意一个客户端
        if(client_vector[i]->bytesAvailable()!=0)
        {
            //表示当前客户端有消息可读取
            QByteArray msg = client_vector[i]->readAll();

            //将QByteArray类型转换为QString类型
            QString msg_string = QString::fromLocal8Bit(msg);

            //将消息展示在ui界面上
            ui->msgwidget->addItem(msg_string);

            //将消息转发给所有客户端,无需转发自己
            for(int j=0;j<client_vector.size();j++)
            {
                if(i!=j)
                {
                    client_vector[j]->write(msg);
                }
            }

        }
    }
}

4> 思维导图

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安装OpenJDK21(linux、macos)

文章目录 安装OpenJDK21java21linux下安装配置mac下安装 安装OpenJDK21 java21 封神&#xff01;Java 21正式发布了&#xff0c;迎来了史诗级新特性&#xff0c;堪称版本最强&#xff01;&#xff01;&#xff01; 视频链接&#xff1a;https://www.bilibili.com/video/BV1E8…

PortSwigger——WebSockets vulnerabilities

文章目录 一、WebSockets二、Lab: Manipulating WebSocket messages to exploit vulnerabilities三、Lab: Manipulating the WebSocket handshake to exploit vulnerabilities四、Using cross-site WebSockets to exploit vulnerabilities4.1 跨站WebSocket劫持&#xff08;cro…

SpringBootWeb三层架构分层解耦

SpringBootWeb 1. SpringBootWeb案例1.1 控制层未拆分代码1.2 实体类1.3 静态资源文件1.4 txt文件1.5 运行界面展示 2. 三层架构拆分2.1 控制层&#xff08;Controller&#xff09;2.1.1 功能2.1.2 用户信息控制层 2.2 业务逻辑层&#xff08;Service&#xff09;2.2.2 功能2.2…

Kimi k1.5: Scaling Reinforcement Learning with LLMs

TL;DR 2025 年 kimi 发表的 k1.5 模型技术报告&#xff0c;和 DeepSeek R1 同一天发布&#xff0c;虽然精度上和 R1 有微小差距&#xff0c;但是文章提出的 RL 路线也有很强的参考意义 Paper name Kimi k1.5: Scaling Reinforcement Learning with LLMs Paper Reading Note…

1.攻防世界 unserialize3(wakeup()魔术方法、反序列化工作原理)

进入题目页面如下 直接开审 <?php // 定义一个名为 xctf 的类 class xctf {// 声明一个公共属性 $flag&#xff0c;初始值为字符串 111public $flag 111;// 定义一个魔术方法 __wakeup()// 当对象被反序列化时&#xff0c;__wakeup() 方法会自动调用public function __wa…

Web前端开发--HTML

HTML快速入门 1.新建文本文件&#xff0c;后缀名改为.html 2.编写 HTML结构标签 3.在<body>中填写内容 HTML结构标签 特点 1.HTML标签中不区分大小写 2.HTML标签属性值中可以使用单引号也可使用双引号 3.HTML语法结构比较松散&#xff08;但在编写时要严格一点&…

JVM(Java 虚拟机)

Java语言的解释性和编译性&#xff08;通过JVM 的执行引擎&#xff09; Java 代码&#xff08;.java 文件&#xff09;要先使用 javac 编译器编译为 .class 文件&#xff08;字节码&#xff09;&#xff0c;紧接着再通过JVM 的执行引擎&#xff08;Execution Engine&#xff09…

Unity3D实现显示模型线框(shader)

系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、效果展示👉二、第一种方式👉二、第二种方式👉壁纸分享👉总结👉前言 在 Unity 中显示物体线框主要基于图形渲染管线和特定的渲染模式。 要显示物体的线框,通常有两种常见的方法:一种是利用内置的渲染…

java项目之直销模式下家具工厂自建网站源码(ssm+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的直销模式下家具工厂自建网站源码。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 直销模式下家具…

window 安装GitLab服务器笔记

目录 视频&#xff1a; 资源&#xff1a; Linux CeneOS7&#xff1a; VMware&#xff1a; Linux无法安装 yum install vim -y 1.手动创建目录 2.下载repo PS 补充视频不可复制的代码 安装GitLab *修改root用户密码相关&#xff08;我卡在第一步就直接放弃了这个操作&…

笔记:理解借贷相等的公式

强烈推荐非会计人士&#xff0c;快速了解会计看这个系列的视频&#xff0c;其中比较烧脑的“借贷相等”公式&#xff0c;这个视频讲解的不错&#xff1a; 4.小白财务入门-借贷记账法_哔哩哔哩_bilibili 比如这里&#xff0c;钱在银行卡重&#xff0c;所以银行存款就是借方…

Qt - 地图相关 —— 3、Qt调用高德在线地图功能示例(附源码)

效果 作者其他相关文章链接:           Qt - 地图相关 —— 1、加载百度在线地图(附源码)           Qt - 地图相关 —— 2、Qt调用百度在线地图功能示例全集,包含线路规划、地铁线路查询等(附源码)           Qt - 地图相关 —— 3、Qt调用…

使用 POI-TL 和 JFreeChart 动态生成 Word 报告

文章目录 前言一、需求背景二、方案分析三、 POI-TL JFreeChart 实现3.1 Maven 依赖3.3 word模板设置3.2 实现代码 踩坑 前言 在开发过程中&#xff0c;我们经常需要生成包含动态数据和图表的 Word 报告。本文将介绍如何结合 POI-TL 和 JFreeChart&#xff0c;实现动态生成 W…

jenkins备份还原配置文件

下载ThinBackup插件 方式1 从插件市场直接下载 Manage Jenkins->Manage Plugins->可选插件搜索 注意&#xff1a;有时可能因为网络或者版本问题下载不了&#xff0c;好像是默认下载最新版本&#xff0c;可选择手动安装&#xff01; 方式二 手动安装插件 点击查看手…

C++蓝桥杯基础篇(二)

片头 嗨&#xff01;小伙伴们&#xff0c;今天我们将学习C蓝桥杯基础篇&#xff08;二&#xff09;&#xff0c;继续练习相关习题&#xff0c;准备好了吗&#xff1f;咱们开始咯~ 第1题 简单计算器输入两个数&#xff0c;以及一个运算符 &#xff0c;-&#xff0c;*&#xff…

将 AMD Zynq™ RFSoC 扩展到毫米波领域

目录 将 AMD Zynq™ RFSoC 扩展到毫米波领域Avnet XRF RFSoC 系统级模块适用于 MATLAB 的 Avnet RFSoC Explorer 工具箱5G mmWave PAAM 开发平台突破性的宽带毫米波波束成形特征&#xff1a;OTBF103 Mathworks Simulink 模型优化毫米波应用中的射频信号路径 用于宽带毫米波上/下…

1Panel配置java运行环境运行springboot项目

一、实际运行效果 1panel上java容器springboot的简单web项目 二、详细操作 步骤一、完成spring项目的打包&#xff0c;生成jar文件 步骤二、登录1panel&#xff0c;点击系统-》文件菜单&#xff0c;上传jar到一个合适的文件夹目录&#xff0c;/opt/jar 如下图&#xff1a; 步…

Jenkins+gitee 搭建自动化部署

Jenkinsgitee 搭建自动化部署 环境说明&#xff1a; 软件版本备注CentOS8.5.2111JDK1.8.0_211Maven3.8.8git2.27.0Jenkins2.319最好选稳定版本&#xff0c;不然安装插件有点麻烦 一、安装Jenkins程序 1、到官网下载相应的版本war或者直接使用yum安装 Jenkins官网下载 直接…

ubuntu安装VMware报错/dev/vmmon加载失败

ubuntu安装VMware报错/dev/vmmon加载失败&#xff0c;解决步骤如下&#xff1a; step1&#xff1a;为vmmon和vmnet组件生成密钥对 openssl req -new -x509 -newkey rsa:2048 -keyout VMW.priv -outform DER -out VMW.der -nodes -days 36500 -subj "/CNVMware/"ste…

LSTM 学习笔记 之pytorch调包每个参数的解释

0、 LSTM 原理 整理优秀的文章 LSTM入门例子&#xff1a;根据前9年的数据预测后3年的客流&#xff08;PyTorch实现&#xff09; [干货]深入浅出LSTM及其Python代码实现 整理视频 李毅宏手撕LSTM [双语字幕]吴恩达深度学习deeplearning.ai 1 Pytorch 代码 这里直接调用了nn.l…