2025.2.11

news/2025/2/12 10:08:37/

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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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> 思维导图


http://www.ppmy.cn/news/1571392.html

相关文章

VMware Workstation创建虚拟机

目录 创建新的虚拟机 虚拟机快照功能 虚拟机添加空间 其他注意事项 创建新的虚拟机 打开VMware Workstation&#xff1a;启动软件后&#xff0c;点击“创建新的虚拟机”。 选择安装方式&#xff1a; 典型安装&#xff1a;适合大多数用户&#xff0c;会自动完成大部分配置…

使用 Visual Studio Code (VS Code) 开发 Python 图形界面程序

安装Python、VS Code Documentation for Visual Studio Code Python Releases for Windows | Python.org 更新pip >python.exe -m pip install --upgrade pip Requirement already satisfied: pip in c:\users\xxx\appdata\local\programs\python\python312\lib\site-pa…

2025.2.8——一、[护网杯 2018]easy_tornado tornado模板注入

题目来源&#xff1a;BUUCTF [护网杯 2018]easy_tornado 目录 一、打开靶机&#xff0c;整理信息 二、解题思路 step 1&#xff1a;分析已知信息 step 2&#xff1a;目标——找到cookie_secret step 3&#xff1a;构造payload 三、小结 一、打开靶机&#xff0c;整理信…

C++ list介绍

文章目录 1. list简介2. list的实现框架2.1 链表结点2.2 链表迭代器2.3 链表 3. list迭代器及反向迭代器设计3.1 list迭代器3.2 list反向迭代器3.3 list迭代器失效 4. list与vector比较 1. list简介 list&#xff0c;即链表。 链表的种类有很多&#xff0c;是否带头结点&#…

探索二分图:染色法与匈牙利算法

引言 二分图&#xff08;Bipartite Graph&#xff09;是图论中一种特殊的图结构&#xff0c;其顶点集可以划分为两个互不相交的子集&#xff0c;且图中的每条边都连接这两个子集中的顶点。二分图在任务分配、匹配问题、网络流等领域有着广泛的应用。本文将详细介绍二分图的定义…

DeepSeek 的含金量还在上升

大家好啊&#xff0c;我是董董灿。 最近 DeepSeek 越来越火了。 网上有很多针对 DeepSeek 的推理测评&#xff0c;除此之外&#xff0c;也有很多人从技术的角度来探讨 DeepSeek 带给行业的影响。 比如今天就看到了一篇文章&#xff0c;探讨 DeepSeek 在使用 GPU 进行模型训练…

C# 数据验证Regex

Regular Expression&#xff0c;简称 Regex,是一种用于匹配和处理文本的强大工具。它通过定义特定的模式&#xff0c;可以用来搜索、替换或提取字符串中的特定内容。 先引入命名空间 using System.Text.RegularExpressions; Intege(整数) 必须是正整数 //必须是正整数publi…

LabVIEW之TDMS文件

在很多场合&#xff0c;早期的LabVIEW版本不得不借助常规的数据库来做一些数据管理工作&#xff0c;但常规数据库对于中高速数据采集显然是不合适的&#xff0c;因为高速数据采集的数据量非常大&#xff0c;用一般的数据库无法满足存储数据的要求。 直到TDM(Technical Data Ma…