QT聊天系统类似QQ聊天(基于TCP、UDP)

QT聊天系统类似QQ聊天(基于TCP、UDP)

想要更多项目私wo!!!

一、项目简介

此项目参考QQ的登陆界面和聊天界面,主要的组成有三个界面,分别是登录界面、私聊界面和群聊界面。

二、项目截图

登入界面QT聊天系统类似QQ聊天(基于TCP、UDP)_第1张图片
登陆中界面
QT聊天系统类似QQ聊天(基于TCP、UDP)_第2张图片
私聊界面
QT聊天系统类似QQ聊天(基于TCP、UDP)_第3张图片
群聊界面
QT聊天系统类似QQ聊天(基于TCP、UDP)_第4张图片
表情界面
QT聊天系统类似QQ聊天(基于TCP、UDP)_第5张图片

三、部分代码

login.c

/*想要更多项目私wo!!!*/
#include "login.h"
#include "ui_login.h"
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "./showWidget/showwidget.h"
#include "./Sunshine/sunshine.h"

//外部变量 需要定义在函数外,否则程序会将其认定为局部变量,同时会将调用的那个文件中的 user_account 认为未定义的变量,出现连接错误
QString user_account = "";

void sleep(unsigned int msec)
{
    QTime dieTime = QTime::currentTime().addMSecs(msec);
    while( QTime::currentTime() < dieTime )
        QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}

Login::Login(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Login)
{
    ui->setupUi(this);
    i=0;
    setWindowFlags(Qt::FramelessWindowHint|Qt::Tool);
    QMovie *movie = new QMovie(":/new/prefix1/blue70-2.gif");
    ui->label->setMovie(movie);
    ui->label_2->installEventFilter(this);
    ui->label_3->installEventFilter(this);
    movie->start();

    ui->label_4->setStyleSheet("border-radius:15px;background-color:green;border-image:url(':/new/prefix1/12.jpg')");
    ui->label_5->setOpenExternalLinks(true);

    ui->label_5->installEventFilter(this);
    animation=new QPropertyAnimation(ui->label_4, "geometry");
    animation->setDuration(400);
    animation->setStartValue(QRect(30, 170, 85, 85));
    animation->setEndValue(QRect(150, 170, 85, 85));

}

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

/****************************
 * Function: mousePressEvent(QMouseEvent *event)
 *
 * Description:
 *   鼠标按下事件
 *
****************************/
void Login::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
     {
         this->setMouseTracking(true);
          mouse_press = true;
          //鼠标相对于窗体的位置(或者使用event->globalPos() - this->pos())
          move_point = event->pos();
          qDebug()<<"移动1";
          qDebug()<<event->source();
     }

}

/****************************
 * Function: mouseReleaseEvent(QMouseEvent *event)
 *
 * Description:
 *   设置鼠标为未被按下
 *
****************************/
void Login::mouseReleaseEvent(QMouseEvent *event)
{
    //设置鼠标为未被按下
        mouse_press = false;
}


/****************************
 * Function: mouseMoveEvent(QMouseEvent *event)
 *
 * Description:
 *   鼠标移动事件
 *
****************************/
void Login::mouseMoveEvent(QMouseEvent *event)
{
    //若鼠标左键被按下
  //  qDebug()<<"mouse_press="<globalPos();
        if(mouse_press)
        {
            i++;
            //鼠标相对于屏幕的位置
            QPoint move_pos = event->globalPos();
             qDebug()<<"移动"<<i;
           //移动主窗体位置
           this->move(move_pos - move_point);
        }
}

/****************************
 * Function: eventFilter(QObject *object, QEvent *e)
 *
 * Description:
 *   事件
 *
****************************/
bool Login::eventFilter(QObject *object, QEvent *e)
{
    if(e->type()==QEvent::MouseButtonPress&&object==ui->label_3)
    {
         close();
    }
    else if(e->type()==QEvent::MouseButtonPress&&object==ui->label_2){
        showMinimized();
        qDebug()<<"最小化";

    }
    else if(e->type()==QEvent::MouseButtonPress&&object==ui->label_5){
        QDesktopServices::openUrl(QUrl("http://www.baidu.com"));
        mouse_press=false;

    }
    return false;
}

/****************************
 * Function: on_pushButton_clicked()
 *
 * Description:
 *   登录按键触发事件
 *
****************************/
void Login::on_pushButton_clicked()
{

    showWidget *show_ui = new showWidget;
    Sunshine *sun_ui = new Sunshine;
    QObject::connect(this,SIGNAL(inShowUI(QString,QString)),show_ui,SLOT(in_ShowUI(QString, QString)));
    //获取账号密码
    user_account = ui->lineEdit->text();
    QString pasd = ui->lineEdit_2->text();

    QSettings *readIni = new QSettings("all_user.ini",QSettings::Format::IniFormat);
    readIni->beginGroup(user_account);                                                          //获取节点位置
    QString value = readIni->value("password").toString();                                      //获取密码值
    QString name = readIni->value("name").toString();                                      //获取用户名
    QString head = readIni->value("head_portrait").toString();                                      //获取用户名


    qDebug()<<ui->lineEdit->text();
    qDebug()<< "126___password   " << value << endl;
    qDebug()<< "127___name   " << name << endl;
    if(ui->lineEdit->text()==""||ui->lineEdit_2->text()==""){
        qDebug()<<"内容为空";
        ui->label_6->setText("账号密码不能为空");
    }
    else if(pasd == value && pasd != NULL)                                                           //账号密码匹配
    {
        readIni->endGroup();
        ui->label_6->hide();
        ui->pushButton->hide();
        ui->lineEdit->hide();
        ui->lineEdit_2->hide();
        ui->label_5->hide();
        ui->label_7->hide();
        animation->start();

        sleep(3000);

        this->hide();
        //emit inIndexUi(name, head);
        emit inShowUI(name, head);
        sun_ui->show();
        sleep(3000);
        show_ui->show();

    }
    else
    {
        QMessageBox *msgBox;
        msgBox = new QMessageBox("警告",                              ///--这里是设置消息框标题
            "密码或账号错误!!",                                        ///--这里是设置消息框显示的内容
            QMessageBox::Critical,                                   ///--这里是在消息框显示的图标
            QMessageBox::Ok | QMessageBox::Default,                  ///---这里是显示消息框上的按钮情况
            QMessageBox::Cancel | QMessageBox::Escape,              ///---这里与 键盘上的 escape 键结合。当用户按下该键,消息框将执行cancel按钮事件
            0);														///---这里是 定义第三个按钮, 该例子 只是 了显示2个按钮
        msgBox->show();
    }

}

void Login::on_lineEdit_2_returnPressed()
{
    qDebug()<<"输入结束66";
}

void Login::showEvent(QShowEvent *event)
{
    mouse_press=false;
}
/*想要更多项目私wo!!!*/
void Login::on_lineEdit_textEdited(const QString &arg1)
{
    qDebug()<<"正在编辑"+arg1;
    if(ui->label_6->text()!=""){
        qDebug()<<"进入了这个函数";
        ui->label_6->setText("");
    }

}

你可能感兴趣的:(QT,qt,c++,html,socket,后端)