国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于qt的簡易聊天實現(xiàn)

這篇具有很好參考價值的文章主要介紹了基于qt的簡易聊天實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

效果展示

本次項目采用的是TCP傳輸文件,UDP實現(xiàn)聊天以及聊天狀態(tài)的反饋。

一、首先運行程序會進入到這樣一個會話界面,也就是新加入一個用戶,新加入的用戶會在右側(cè)顯示其用戶名、主機名和IP地址,在消息記錄框中也會提示在線信息。

基于qt的簡易聊天實現(xiàn)

二、消息字體樣式、字體大小、加粗、斜體、下劃線、顏色的效果展示。

基于qt的簡易聊天實現(xiàn)

?三、進行文件傳輸。

1. 進行文件傳輸前要先從右側(cè)列表選擇傳輸?shù)膶ο螅缓筮x擇傳輸?shù)奈募?/p>

基于qt的簡易聊天實現(xiàn)

2. 文件選擇后會顯示將要發(fā)送的文件名,即可點擊發(fā)送。

基于qt的簡易聊天實現(xiàn)

?3. 發(fā)送端點擊發(fā)送后,接收端會彈出是否接收文件的提示框,然后進行選擇。選擇接收后會再次彈出保存文件的對話框,選擇保存路徑,就完成了文件的傳輸。基于qt的簡易聊天實現(xiàn)

?四、保存聊天記錄會彈出保存文件對話框選擇保存路徑,輸入保存文件名即可,這里保存聊天記錄和清空聊天消息框內(nèi)容就不做展示了,直接上代碼。文章來源地址http://www.zghlxwxcb.cn/news/detail-511050.html

具體實現(xiàn)代碼

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="");   //發(fā)送UDP數(shù)據(jù)
    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 *);             //關(guān)閉事件

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

public slots:
    void processPendingDatagrams();     //接收UDP數(shù)據(jù)
    void on_sendButton_clicked();       //發(fā)送
    void getFileName(QString);          //獲取文件名
    void on_sendToolBtn_clicked();      //傳輸文件發(fā)送
    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();                         //顏色設(shè)置

    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"));   
    //創(chuàng)建UDP套接字,并初始化
    udpSocket = new QUdpSocket(this);
    port = 45454;
    udpSocket->bind(port, QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint);
    connect(udpSocket, SIGNAL(readyRead()), this, SLOT(processPendingDatagrams()));
    sendMessage(NewParticipant);

    //創(chuàng)建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;
}
//發(fā)送UDP數(shù)據(jù)
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("發(fā)送內(nèi)容不能為空"),QMessageBox::Ok);
            return;
        }
        out << address << getMessage();
        ui->messageBrowser->verticalScrollBar()
                ->setValue(ui->messageBrowser->verticalScrollBar()->maximum());
        break;

    case NewParticipant :
        out << address;
        break;

    

到了這里,關(guān)于基于qt的簡易聊天實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • QT簡易加法計算器項目實現(xiàn)

    QT簡易加法計算器項目實現(xiàn)

    完整代碼見GitHub:點擊進入 在該項目中,使用了三個文件,分別是CalculatorDialog.h, CalculatorDialog.cpp, main.cpp CalculatorDialog.h:在該頭文件里定義了一些成員變量和槽函數(shù),用于實現(xiàn)計算器基本功能。 CalculatorDialog.cpp: CalculatorDialog 類的構(gòu)造函數(shù),用于初始化計算器對話框界面和控

    2024年02月11日
    瀏覽(24)
  • ai聊天問答知識庫機器人源碼,基于gpt實現(xiàn)的本地知識庫問答實現(xiàn),聊天對話效果,發(fā)送回復(fù)以及流式輸出...

    ai聊天問答知識庫機器人源碼,基于gpt實現(xiàn)的本地知識庫問答實現(xiàn),聊天對話效果,發(fā)送回復(fù)以及流式輸出...

    現(xiàn)在基于gpt做自己項目的問答機器人,效果非常的好??梢园炎约旱奈臋n上傳上去,讓機器人根據(jù)文檔來進行回答。 想要實現(xiàn)智能AI問答功能,現(xiàn)在大部分都是基于向量數(shù)據(jù)庫的形式。 整體的流程就是:上傳文檔===openai向量接口 ==== 存入向量數(shù)據(jù)庫 訪客咨詢:? 咨詢問題

    2024年02月10日
    瀏覽(37)
  • QT中窗口自繪制效果展示

    QT中窗口自繪制效果展示

    項目中需要使用QT進行窗口自繪,前期先做一下技術(shù)探索,參考相關(guān)資料代碼熟悉流程。本著代碼是最好的老師原則,在此記錄一下。 目錄 1.運行效果 2.代碼結(jié)構(gòu) 3.具體代碼 myspeed.pro drawdialog.h meter1.h meter2.h drawdialog.cpp meter1.cpp meter2.cpp main.cpp

    2024年02月07日
    瀏覽(19)
  • 基于Qt5 實現(xiàn)的簡易慕課爬取程序

    基于Qt5 實現(xiàn)的簡易慕課爬取程序

    Qt 網(wǎng)絡(luò)下載數(shù)據(jù)實例 名稱:MookScrapy 這個項目主要是使用了 Qt 里面的 QNetworkAccessManager 去下載慕課網(wǎng)站的數(shù)據(jù) https://coding.imooc.com,也就是這個網(wǎng)站里面的卡片信息。然后做一定的分析和展示。(僅供參考,非法爬蟲違法,學(xué)習(xí)使用下載的數(shù)據(jù)即可) 功能: 1.下載網(wǎng)頁,對網(wǎng)

    2024年02月13日
    瀏覽(16)
  • ChatGPT編程實現(xiàn)簡易聊天工具

    ChatGPT編程實現(xiàn)簡易聊天工具

    今天借助[[小蜜蜂]][https://zglg.work]網(wǎng)站的ChatGPT練習(xí)socket編程,實現(xiàn)一個簡易聊天工具軟件。 環(huán)境:Pycharm 2021 系統(tǒng):Mac OS 向ChatGPT輸入如下內(nèi)容: ChatGPT收到后,根據(jù)返回結(jié)果并進行部分修改,如下所示: 下面是一個簡易的客戶端-服務(wù)器聊天程序的示例代碼,使用 Python 的 s

    2024年03月18日
    瀏覽(21)
  • QT練手小項目-——天氣播報小狗(ui展示分析,構(gòu)造實現(xiàn),json格式數(shù)據(jù)分析,界面交互,天氣圖標處理,小狗語音)

    QT練手小項目-——天氣播報小狗(ui展示分析,構(gòu)造實現(xiàn),json格式數(shù)據(jù)分析,界面交互,天氣圖標處理,小狗語音)

    前言 ? ? ? ? 經(jīng)過之前一段時間的QT學(xué)習(xí),做出一個小軟件來總結(jié)自己掌握關(guān)于qt的知識點。網(wǎng)絡(luò)上有許多免費的天氣接口(api),有xml格式的,也有json格式的。具體xml和json有什么區(qū)別,這里我就不去深究了,我們這里用的是一個json格式的數(shù)據(jù),所以 重點是對json格式的數(shù)據(jù)

    2023年04月17日
    瀏覽(29)
  • 用Java實現(xiàn)簡易聊天室

    用Java實現(xiàn)簡易聊天室

    ? 說明:如果一個?類,需要有界面的顯示,那么該類就需要繼承自JFrame,此時,該類就可以被稱為一個“窗體類\\\"。 ? 服務(wù)端代碼: 客戶端代碼: ?啟動時,必須先啟動服務(wù)端,再啟動客戶端。 最終效果: ? ? ?

    2024年02月11日
    瀏覽(20)
  • LinuxC TCP實現(xiàn)簡易聊天室

    LinuxC TCP實現(xiàn)簡易聊天室

    目錄 1.概述 1.1聊天室設(shè)計內(nèi)容 2.系統(tǒng)設(shè)計 2.1系統(tǒng)功能設(shè)計 2.1.1用戶管理 2.1.2聊天室管理 2.1.3聊天管理 2.2系統(tǒng)數(shù)據(jù)結(jié)構(gòu)設(shè)計 2.3系統(tǒng)主要函數(shù)設(shè)計 3.系統(tǒng)實現(xiàn) 3.2功能模塊的程序流程圖及運行界面 3.2.1功能模塊流程圖 ?3.2.2運行界面 4.源代碼 4.1客戶端 4.2服務(wù)器 注:存在問題 1

    2024年02月09日
    瀏覽(20)
  • 【嵌入式Linux項目】基于Linux的全志H616開發(fā)板智能家居項目(語音控制、人臉識別、安卓APP和PC端QT客戶端遠程操控)有視頻功能展示

    【嵌入式Linux項目】基于Linux的全志H616開發(fā)板智能家居項目(語音控制、人臉識別、安卓APP和PC端QT客戶端遠程操控)有視頻功能展示

    目錄 一、功能需求 二、開發(fā)環(huán)境 1、硬件: 2、軟件: 3、引腳分配: 三、關(guān)鍵點 1、設(shè)計模式之工廠模式 2、線程 3、wiringPi庫下的相關(guān)硬件操作函數(shù)調(diào)用 4、語音模塊的串口通信 5、攝像頭的實時監(jiān)控和拍照功能 6、人臉識別 7、qt程序跨平臺運行(編譯成安卓APP) 四、編譯和

    2024年02月15日
    瀏覽(24)
  • 純JAVA模擬、實現(xiàn)QQ簡易聊天互動程序

    純JAVA模擬、實現(xiàn)QQ簡易聊天互動程序

    實現(xiàn)的功能、步驟: 1、定義JFrame窗體中的組件 2、在構(gòu)造方法中初始化窗體的組件 3、使用網(wǎng)絡(luò)編程完成數(shù)據(jù)的傳輸(TCP,UDP協(xié)議) 4、實現(xiàn)發(fā)送按鈕的監(jiān)聽點擊事件 5、實現(xiàn)回車鍵發(fā)送數(shù)據(jù)?? 功能演示: 沒有點發(fā)送,數(shù)據(jù)卻發(fā)送出去了是因為按了回車鍵? ?運用到的知識點

    2024年02月11日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包