qt小练习

ops/2024/10/18 9:03:58/

制作简易闹钟

头文件
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTimer>       //定时器类
#include <QDebug>        //信息调试类
#include <QMessageBox> //消息对话框类
#include <QTime>        //时间类
#include <QString>
#include <QTimerEvent>
#include <QDateTime>      //日期时间类,包含年月日
#include <QTextToSpeech>    // 文本转语音类QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_startButton_clicked();   //开启闹钟按钮的槽函数的声明void on_cancleButton_clicked();       //取消闹钟按钮的槽函数的声明private:Ui::Widget *ui;int timerId;    //定时器idint clockTimerId;     //闹钟定时器id//声明定时器处理函数void timerEvent(QTimerEvent *event)override;QTextToSpeech *speecher; //播报员指针};
#endif // WIDGET_H
源文件
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//启动定时器timerId = this->startTimer(1000);//给播报员实例化对象speecher = new QTextToSpeech(this);
}Widget::~Widget()
{delete ui;
}//设置闹钟按钮的槽函数
void Widget::on_startButton_clicked()
{//启动定时器clockTimerId = this->startTimer(1000);//按钮为不可用状态ui->startButton->setEnabled(false);
}
//定时器事件处理的函数
void Widget::timerEvent(QTimerEvent *event)
{//判断定时器是否到位if(event->timerId() == timerId){//设置文本居中ui->label_2->setAlignment(Qt::AlignCenter);QDateTime sys_dateTime = QDateTime::currentDateTime();//调用toString函数转换QString d = sys_dateTime.toString("yyyy-MM-dd hh:mm:ss");//设置字体QFont font("Times New Roman",20,QFont::Bold);ui->label_2->setFont(font);ui->label_2->setText(d);}//判断闹钟是否到位if(event->timerId() == clockTimerId){QTime sysTime = QTime::currentTime();     //获取当前时间QString t = sysTime.toString("hh:mm:ss");if(ui->alarmEdit->text() == t)         //系统时间和闹钟标签时间是否一致{//时间到,语言播报speecher->say(ui->textEdit->toPlainText());//关闭闹钟this->killTimer(clockTimerId);//设置按钮可用ui->startButton->setEnabled(true);//清除闹铃ui->alarmEdit->clear();}}
}
//关闭闹钟按钮对应的槽函数
void Widget::on_cancleButton_clicked()
{//关闭闹钟this->killTimer(clockTimerId);//设置按钮可用ui->startButton->setEnabled(true);//清除闹铃ui->alarmEdit->clear();
}
效果图

 QT实现网络编程

服务器

头文件
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTcpServer>       //服务器类
#include <QTcpSocket>        //客户端类
#include <QDebug>            //信息调试类
#include <QMessageBox>       //信息对话框类
#include <QList>             //链表容器,存储连接的客户端QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_startButton_clicked();void newConnection_plot();void readyRead_slot();
private:Ui::Widget *ui;//创建服务器指针QTcpServer *server;//客户端类QList<QTcpSocket*> clientList;};
#endif // WIDGET_H
源代码
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//实例化服务器对象server = new QTcpServer(this);//链接新客户端的信号连接到自定义的槽信号connect(server,&QTcpServer::newConnection,this,&Widget::newConnection_plot);
}Widget::~Widget()
{delete ui;
}void Widget::on_startButton_clicked()
{if(ui->startButton->text() == "开启服务器"){//获取文本的端口号quint16 port = ui->portEdit->text().toUInt();//开启服务器if(!server->listen(QHostAddress::Any,port)){QMessageBox::information(this,"提示","开启失败");return;}else{QMessageBox::information(this,"提示","成功开启");}//到这链接成功,服务器发送一个newConnection信号,只需要一次连接//将文本设置成关闭ui->startButton->setText("关闭服务器");}else{//关闭服务器server->close();//将文本设置成开启ui->startButton->setText("开启服务器");}
}//处理newConnection信号的槽函数
void Widget::newConnection_plot()
{qDebug() << "有新客户端连接";//获取新连接的客户端的套接字QTcpSocket* s = server->nextPendingConnection();//将套接字存入链表clientList.push_back(s);//到此服务器可以获取客户端的套接字了//服务器收到客户端信息会发送readyRead信号connect(s,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);
}//处理readyRead信号的槽函数
void Widget::readyRead_slot()
{//遍历查看哪个客户端发的信息for(auto val:clientList){if(val->bytesAvailable())    //判断客户端是否有信息待读{QByteArray msg = val->readAll();  //读取信息//展示到ui界面ui->listWidget->addItem(QString::fromLocal8Bit(msg));//转发所有客户端for(auto key:clientList){key->write(msg);}}}
}

客户端

头文件
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTcpSocket>     //客户端类
#include <QMessageBox>    //信息对话框类QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_connectButton_clicked();void connected_slot();void readyRead_slot();void on_sendButton_clicked();void on_disconnectButton_clicked();void disconnected_slot();private:Ui::Widget *ui;QTcpSocket * client; //客户端指针QString userName;   //存储用户名};
#endif // WIDGET_H
源代码
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//实例化会客户端对象client = new QTcpSocket(this);//connected信号连接的槽函数connect(client,&QTcpSocket::connected,this,&Widget::connected_slot);//客户端收到信息,自动发送readyRead信号connect(client,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);//处理断开信号connect(client,&QTcpSocket::disconnected,this,&Widget::disconnected_slot);}Widget::~Widget()
{delete ui;
}//连接按钮对应的槽函数
void Widget::on_connectButton_clicked()
{//获取文本框的内容userName = ui->nameEdit->text();QString ip = ui->idEdit->text();quint16 port = ui->portEdit->text().toUInt();//连接服务器client->connectToHost(ip,port);//连接成功发送connected信号//链接后设置按钮,文本框不可用ui->connectButton->setEnabled(false);ui->nameEdit->setEnabled(false);ui->idEdit->setEnabled(false);ui->portEdit->setEnabled(false);
}//连接connected信号的槽函数
void Widget::connected_slot()
{QMessageBox::information(this,"提示","连接成功");QString msg = userName + "加入聊天";//准备进入的信息client->write(msg.toLocal8Bit());//发送信息
}//readyRead信号的槽函数
void Widget::readyRead_slot()
{//接收套接字的内容QByteArray msg = client->readAll();//将其展示到ui界面ui->listWidget->addItem(QString::fromLocal8Bit(msg));
}//发送按钮对应的槽函数
void Widget::on_sendButton_clicked()
{//获取文本内容QString msg = userName + ":" + ui->msgEdit->text();//发送给服务器client->write(msg.toLocal8Bit());//清空文本框ui->msgEdit->clear();
}void Widget::on_disconnectButton_clicked()
{//将断开信息发送给服务器QString msg = userName + "退出聊天";//准备进入的信息client->write(msg.toLocal8Bit());//发送信息//断开服务器client->disconnectFromHost();//断开后自动发送disconnected信号//断开链接后设置按钮,文本框可用ui->connectButton->setEnabled(true);ui->nameEdit->setEnabled(true);ui->idEdit->setEnabled(true);ui->portEdit->setEnabled(true);
}void Widget::disconnected_slot()
{QMessageBox::information(this,"提示","断开连接");
}
效果图

 


http://www.ppmy.cn/ops/125640.html

相关文章

Error:WPF项目中使用oxyplot,错误提示命名空间中不存在“Plot”名称

在OxyPlot中&#xff0c;<oxy:PlotView>和<oxy:Plot>都是用来显示图表的控件&#xff0c;在WPF项目中使用oxyplot之前&#xff0c;先通过NuGet安装依赖包&#xff1a;OxyPlot.Wpf。 <oxy:PlotView>和<oxy:Plot>使用示例&#xff1a; <oxy:PlotVie…

鸿蒙开发(NEXT/API 12)【安全单元访问开发】网络篇

简介 安全单元&#xff08;SecureElement&#xff0c;简称SE&#xff09;&#xff0c;电子设备上可能存在一个或多个安全单元&#xff0c;比如有eSE(Embedded SE)和SIM卡。能够充当安全单元的SIM卡&#xff0c;要求具备NFC功能。 场景介绍 应用程序可以通过接口访问安全单元…

Web自动化Demo-Kotlin+Selenium

1.新建工程 打开Aqua&#xff0c;点击New Project选中Kotlin&#xff0c;配置如下&#xff1a; 然后在build.gradle.kts文件中添加依赖 plugins {kotlin("jvm") version "1.9.23" }group "org.example" version "1.0-SNAPSHOT"rep…

聚观早报 | 苹果重磅更新;OpenAI推出ChatGPT Canvas

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 10月1日消息 苹果重磅更新 OpenAI推出ChatGPT Canvas Meta发布Movie Gen iQOO 13影像规格曝光 华为HarmonyOS N…

【bug】finalshell向远程主机拖动windows快捷方式导致卡死

finalshell向远程主机拖动windows快捷方式导致卡死 问题描述 如题&#xff0c;作死把桌面的快捷方式拖到了finalshell连接的服务器面板中&#xff0c;导致finalshell没有响应&#xff08;小概率事件&#xff0c;有时会触发&#xff09; 解决 打开任务管理器查看finalshell进…

Springboot api http并发测试请求

pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> 线程发起请求 package com.example.demo;import org.springframework.http.HttpEntity; import org…

【JS】在 Node.js 和 Electron 中获取设备 UUID 的最佳实践

在现代应用开发中&#xff0c;识别设备的唯一性是一个常见需求。无论是为了授权、数据跟踪还是用户设备管理&#xff0c;获取设备 UUID 都是实现这些目标的关键。在这篇博客中&#xff0c;我们将探讨如何在 Node.js 和 Electron 中获取设备的 UUID&#xff0c;并比较两种主要方…

概率 随机变量以及分布

一、基础定义及分类 1、随机变量 随机变量是一个从样本空间&#xff08;所有可能结果的集合&#xff09;到实数集的函数。&#xff08;随机变量的值可以是离散的&#xff0c;也可以是连续的。 &#xff09; 事件可以定义为随机变量取特定值的集合。 2、离散型随机变量 随机变…