基于qt的简易聊天实现

这篇具有很好参考价值的文章主要介绍了基于qt的简易聊天实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

效果展示

本次项目采用的是TCP传输文件,UDP实现聊天以及聊天状态的反馈。

一、首先运行程序会进入到这样一个会话界面,也就是新加入一个用户,新加入的用户会在右侧显示其用户名、主机名和IP地址,在消息记录框中也会提示在线信息。

基于qt的简易聊天实现

二、消息字体样式、字体大小、加粗、斜体、下划线、颜色的效果展示。

基于qt的简易聊天实现

 三、进行文件传输。

1. 进行文件传输前要先从右侧列表选择传输的对象,然后选择传输的文件。

基于qt的简易聊天实现

2. 文件选择后会显示将要发送的文件名,即可点击发送。

基于qt的简易聊天实现

 3. 发送端点击发送后,接收端会弹出是否接收文件的提示框,然后进行选择。选择接收后会再次弹出保存文件的对话框,选择保存路径,就完成了文件的传输。基于qt的简易聊天实现

 四、保存聊天记录会弹出保存文件对话框选择保存路径,输入保存文件名即可,这里保存聊天记录和清空聊天消息框内容就不做展示了,直接上代码。文章来源地址https://www.toymoban.com/news/detail-511050.html

具体实现代码

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTextCharFormat>
class QUdpSocket;
class TcpServer;

namespace Ui {
class Widget;
}

enum MessageType{Message, NewParticipant, ParticipantLeft, FileName, Refuse};

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

protected:
    void newParticipant(QString userName,QString localHostName, QString ipAddress);     //添加新用户加入
    void participantLeft(QString userName,QString localHostName, QString time);         //用户离开
    void sendMessage(MessageType type, QString serverAddress="");   //发送UDP数据
    QString getIP();                //获取IP
    QString getUserName();          //获取用户名
    QString getMessage();           //获取用户聊天信息
    void hasPendingFile(QString userName, QString serverAddress,QString clientAddress, QString fileName);//判断接收文件

    bool saveFile(const QString& fileName);     //保存文件
    void closeEvent(QCloseEvent *);             //关闭事件

private:
    Ui::Widget *ui;
    QUdpSocket *udpSocket;
    qint16 port;
    QString fileName;
    TcpServer *server;
    QColor color;

public slots:
    void processPendingDatagrams();     //接收UDP数据
    void on_sendButton_clicked();       //发送
    void getFileName(QString);          //获取文件名
    void on_sendToolBtn_clicked();      //传输文件发送
    void on_fontComboBox_currentFontChanged(QFont f);      //更改字体
    void on_sizeComboBox_currentIndexChanged(QString );     //更改字体大小
    void on_boldToolBtn_clicked(bool checked);              //加粗
    void on_italicToolBtn_clicked(bool checked);            //倾斜
    void on_underlineToolBtn_clicked(bool checked);         //下划线
    void on_colorToolBtn_clicked();                         //颜色设置

    void currentFormatChanged(const QTextCharFormat &format);
    void on_saveToolBtn_clicked();          //保存聊天记录
    void on_clearToolBtn_clicked();         //清空记录
    void on_exitButton_clicked();           //退出
};

#endif // WIDGET_H

widget.cpp (主界面具体功能)

#include "widget.h"
#include "ui_widget.h"
#include <QUdpSocket>
#include <QHostInfo>
#include <QMessageBox>
#include <QScrollBar>
#include <QDateTime>
#include <QNetworkInterface>
#include <QProcess>
#include "tcpserver.h"
#include "tcpclient.h"
#include <QFileDialog>
#include <QColorDialog>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    setWindowIcon(QPixmap(":/C:/Users/liuqy/Desktop/qq.png"));   
    //创建UDP套接字,并初始化
    udpSocket = new QUdpSocket(this);
    port = 45454;
    udpSocket->bind(port, QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint);
    connect(udpSocket, SIGNAL(readyRead()), this, SLOT(processPendingDatagrams()));
    sendMessage(NewParticipant);

    //创建TCP套接字
    server = new TcpServer(this);
    connect(server, SIGNAL(sendFileName(QString)), this, SLOT(getFileName(QString)));

    connect(ui->messageTextEdit, SIGNAL(currentCharFormatChanged(QTextCharFormat)),
            this, SLOT(currentFormatChanged(const QTextCharFormat)));
}
Widget::~Widget()
{
    delete ui;
}
//发送UDP数据
void Widget::sendMessage(MessageType type, QString serverAddress)
{
    QByteArray data;
    QDataStream out(&data, QIODevice::WriteOnly);
    QString localHostName = QHostInfo::localHostName();
    QString address = getIP();
    out << type << getUserName() << localHostName;

    switch(type)
    {
    case Message :
        if (ui->messageTextEdit->toPlainText() == "") {
            QMessageBox::warning(0,tr("警告"),tr("发送内容不能为空"),QMessageBox::Ok);
            return;
        }
        out << address << getMessage();
        ui->messageBrowser->verticalScrollBar()
                ->setValue(ui->messageBrowser->verticalScrollBar()->maximum());
        break;

    case NewParticipant :
        out << address;
        break;

    

到了这里,关于基于qt的简易聊天实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT简易加法计算器项目实现

    完整代码见GitHub:点击进入 在该项目中,使用了三个文件,分别是CalculatorDialog.h, CalculatorDialog.cpp, main.cpp CalculatorDialog.h:在该头文件里定义了一些成员变量和槽函数,用于实现计算器基本功能。 CalculatorDialog.cpp: CalculatorDialog 类的构造函数,用于初始化计算器对话框界面和控

    2024年02月11日
    浏览(44)
  • ai聊天问答知识库机器人源码,基于gpt实现的本地知识库问答实现,聊天对话效果,发送回复以及流式输出...

    现在基于gpt做自己项目的问答机器人,效果非常的好。可以把自己的文档上传上去,让机器人根据文档来进行回答。 想要实现智能AI问答功能,现在大部分都是基于向量数据库的形式。 整体的流程就是:上传文档===openai向量接口 ==== 存入向量数据库 访客咨询:  咨询问题

    2024年02月10日
    浏览(49)
  • QT中窗口自绘制效果展示

    项目中需要使用QT进行窗口自绘,前期先做一下技术探索,参考相关资料代码熟悉流程。本着代码是最好的老师原则,在此记录一下。 目录 1.运行效果 2.代码结构 3.具体代码 myspeed.pro drawdialog.h meter1.h meter2.h drawdialog.cpp meter1.cpp meter2.cpp main.cpp

    2024年02月07日
    浏览(44)
  • 基于Qt5 实现的简易慕课爬取程序

    Qt 网络下载数据实例 名称:MookScrapy 这个项目主要是使用了 Qt 里面的 QNetworkAccessManager 去下载慕课网站的数据 https://coding.imooc.com,也就是这个网站里面的卡片信息。然后做一定的分析和展示。(仅供参考,非法爬虫违法,学习使用下载的数据即可) 功能: 1.下载网页,对网

    2024年02月13日
    浏览(41)
  • ChatGPT编程实现简易聊天工具

    今天借助[[小蜜蜂]][https://zglg.work]网站的ChatGPT练习socket编程,实现一个简易聊天工具软件。 环境:Pycharm 2021 系统:Mac OS 向ChatGPT输入如下内容: ChatGPT收到后,根据返回结果并进行部分修改,如下所示: 下面是一个简易的客户端-服务器聊天程序的示例代码,使用 Python 的 s

    2024年03月18日
    浏览(37)
  • QT练手小项目-——天气播报小狗(ui展示分析,构造实现,json格式数据分析,界面交互,天气图标处理,小狗语音)

    前言         经过之前一段时间的QT学习,做出一个小软件来总结自己掌握关于qt的知识点。网络上有许多免费的天气接口(api),有xml格式的,也有json格式的。具体xml和json有什么区别,这里我就不去深究了,我们这里用的是一个json格式的数据,所以 重点是对json格式的数据

    2023年04月17日
    浏览(77)
  • 用Java实现简易聊天室

      说明:如果一个 类,需要有界面的显示,那么该类就需要继承自JFrame,此时,该类就可以被称为一个“窗体类\\\"。   服务端代码: 客户端代码:  启动时,必须先启动服务端,再启动客户端。 最终效果:      

    2024年02月11日
    浏览(42)
  • LinuxC TCP实现简易聊天室

    目录 1.概述 1.1聊天室设计内容 2.系统设计 2.1系统功能设计 2.1.1用户管理 2.1.2聊天室管理 2.1.3聊天管理 2.2系统数据结构设计 2.3系统主要函数设计 3.系统实现 3.2功能模块的程序流程图及运行界面 3.2.1功能模块流程图  3.2.2运行界面 4.源代码 4.1客户端 4.2服务器 注:存在问题 1

    2024年02月09日
    浏览(42)
  • 【嵌入式Linux项目】基于Linux的全志H616开发板智能家居项目(语音控制、人脸识别、安卓APP和PC端QT客户端远程操控)有视频功能展示

    目录 一、功能需求 二、开发环境 1、硬件: 2、软件: 3、引脚分配: 三、关键点 1、设计模式之工厂模式 2、线程 3、wiringPi库下的相关硬件操作函数调用 4、语音模块的串口通信 5、摄像头的实时监控和拍照功能 6、人脸识别 7、qt程序跨平台运行(编译成安卓APP) 四、编译和

    2024年02月15日
    浏览(61)
  • websocket+elementui+vue实现简易聊天室

    搭建服务端环境 安装socket.io 服务端基于node,js的express框架生成,所以写成模块,引入至app.js中 其中,io.sockets.emit用于向所有建立连接的客户端发送信息,socket.broadcast.emit用于向除发送方之外的客户端发送信息。 客户端基于vue和elementui 进入聊天页面后,先判断用户是否登录,

    2024年04月25日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包