多人聊天室

多人聊天室代码

多人聊天室 server.c代码

#include "server_test.h"
#include "ui_server_test.h"
#include <QTcpSocket>
#include <QTcpServer>
server_test::server_test(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::server_test)
{
    ui->setupUi(this);
    ui->sip->setText("127.0.0.1");
    ui->sport->setText("9999");
    startServer();
}

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

void server_test::startServer()
{
    m_server = new QTcpServer(this);
    m_server->listen(QHostAddress(ui->sip->text()),ui->sport->text().toInt());
    connect(m_server,SIGNAL(newConnection()),this,SLOT(slot_newConnection()));
}

void server_test::slot_newConnection()
{
    // 把新加入的socket放入链表中
    QTcpSocket* socket = m_server->nextPendingConnection();
    ui->textEdit->append(socket->peerAddress().toString()+"down"+"\n");
    m_sockets.push_back(socket);
    connect(socket,SIGNAL(readyRead()),this,SLOT(slot_readMessage()));
    connect(socket,SIGNAL(disconnected()),this,SLOT(slot_disconnect()));

}

void server_test::slot_readMessage()
{
    QTcpSocket* socket = (QTcpSocket*)QObject::sender();  // 获得是哪个socket收到了消息

    QString str = socket->readAll().data();

    for(int i=0; i<m_sockets.size(); i++)
    {
        if(m_sockets[i] != socket)
        m_sockets[i]->write(str.toStdString().data());
    }
}

void server_test::slot_disconnect()
{
    QTcpSocket* socket = (QTcpSocket*)QObject::sender();  // 获得是哪个socket收到了消息
    ui->textEdit->append(socket->peerAddress().toString()+"up"+"\n");
}

多人聊天室 server.h

```javascript
#ifndef SERVER_TEST_H
#define SERVER_TEST_H

#include <QMainWindow>
#include <QTcpSocket>
#include <QTcpServer>
#include <QTcpSocket>
#include <QHostAddress>
namespace Ui {
class server_test;
}

class server_test : public QMainWindow
{
    Q_OBJECT

public:
    explicit server_test(QWidget *parent = 0);
    ~server_test();
    QTcpServer* m_server;
    QTcpSocket* m_socket;      // 客户端套接字

    void connectToServer();    // 连接到服务器
    QList<QTcpSocket*> m_sockets;   // 连接到server的所有客户.  链表方式, 在服务器端的一个备份(客户端的socket)

    void startServer();    // 启动一个server



public slots:
    void slot_newConnection();    //  对应客户端的 connectToHost();

    void slot_readMessage();   // 每一个socket绑定
    void slot_disconnect();
private:
    Ui::server_test *ui;
};

#endif // SERVER_TEST_H

#多人聊天室 client.c

#include "client_test.h"
#include "ui_client_test.h"

client_test::client_test(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::client_test)
{
    ui->setupUi(this);
    connectToServer();

}

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

void client_test::connectToServer()
{
    m_socket = new QTcpSocket(this);
    m_socket->connectToHost(QHostAddress::LocalHost, 9999);
    connect(m_socket,SIGNAL(readyRead()),this,SLOT(slot_readMessage()));   // 告诉socket, 要用slot_readMessage()去处理接收的消息.
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(slot_btnSendMsg()));


}

void client_test::slot_readMessage()
{
    QString str = m_socket->readAll().data();


    ui->textEdit->append(m_socket->peerAddress().toString()+":"  + str+ "\n");
}

void client_test::slot_btnSendMsg()
{
    QString str = ui->textEdit_2->toPlainText();

    m_socket->write(str.toUtf8());    // Exception
    ui->textEdit->append("me say:"+ str.toUtf8());
    ui->textEdit_2->clear();
}

#多人聊天室 client.h

#ifndef CLIENT_TEST_H
#define CLIENT_TEST_H

#include <QMainWindow>
#include <QtWidgets>
#include <QTcpSocket>
#include <QTcpServer>
namespace Ui {
class client_test;
}

class client_test : public QMainWindow
{
    Q_OBJECT

public:
    explicit client_test(QWidget *parent = 0);
    ~client_test();
    QTcpSocket* m_socket;      // 客户端套接字
    void connectToServer();    // 连接到服务器
private slots:
    void slot_readMessage();   // 处理接收服务器方发送的消息
    void slot_btnSendMsg();    // 点击发送按钮后,后发送消息
private:
    Ui::client_test *ui;
};

#endif // CLIENT_TEST_H

#数据库demo main.c

    #include <QCoreApplication>
    #include <QSql>
    #include <QSqlDatabase>
    #include <QSqlError>
    #include <QSqlQuery>
    #include <QString>
    #include <QFile>
    #include <QDebug>
    #include <QVariantList>
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE");
    
        database.setDatabaseName("CashSystem.db");
    
        if(database.open())
        {
            qDebug()<<"Database Opened";
    
            QSqlQuery sql_query;
            QString create_sql = "create table member (id int primary key, name varchar(30), address varchar(30))"; //创建数据表
            QString insert_sql = "insert into member values(?,?,?)";    //插入数据
    
            QString select_all_sql = "select * from member";
    
            sql_query.prepare(create_sql); //创建表
            if(!sql_query.exec()) //查看创建表是否成功
            {
                qDebug()<<QObject::tr("Table Create failed");
                qDebug()<<sql_query.lastError();
            }
            else
            {
                qDebug()<< "Table Created" ;
    
                //插入数据
                sql_query.prepare(insert_sql);
    
                QVariantList GroupIDs;
                GroupIDs.append(0);
                GroupIDs.append(1);
                GroupIDs.append(2);
    
                QVariantList GroupNames;
                GroupNames.append("hsp");
                GroupNames.append("rl");
                GroupNames.append("spl");
    
                QVariantList GroupAddress;
                GroupAddress.append("南充");
                GroupAddress.append("宝鸡");
                GroupAddress.append("南充");
    
                sql_query.addBindValue(GroupIDs);
                sql_query.addBindValue(GroupNames);
                sql_query.addBindValue(GroupAddress);
    
                if(!sql_query.execBatch())
                {
                    qDebug()<<sql_query.lastError();
                }
                else
                {
                    qDebug()<<"插入记录成功";
                }
    
                //查询所有记录
                sql_query.prepare(select_all_sql);
                if(!sql_query.exec())
                {
                    qDebug()<<sql_query.lastError();
                }
                else
                {
                    while(sql_query.next())
                    {
                        int id = sql_query.value(0).toInt();
                        QString name = sql_query.value(1).toString();
                        QString address = sql_query.value(2).toString();
                        qDebug()<<QString("ID:%1  Name:%2  Address:%3").arg(id).arg(name).arg(address);
                    }
                }
            }
        }
        database.close();
       // QFile::remove("CashSystem.db");
        return a.exec();
    }

#数据库demo2

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
#include <QSqlError>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("CashSystem.db");
    if(!db.open())
    {
        qDebug()<<"数据库打开出错";
    }
    else
        qDebug()<<"数据库打开成功";
    // 1. 实例化model
    model = new QSqlTableModel(this);
    // 2. 将模型设置到视图中
    ui->tableView->setModel(model);
    // 3. 给model设置数据库表 -- 前提条件: 数据库已经打开了
    model->setTable("member");
    // 4. 查询表
    model->select();

    QSqlQuery sql_query;


    sql_query.exec("insert into member values(5,'34','天猫')");
    qDebug()<<sql_query.lastError();
    sql_query.exec("select * from member");
    while(sql_query.next())
    {
        int id = sql_query.value(0).toInt();
        QString name = sql_query.value(1).toString();
        QString address = sql_query.value(2).toString();
        qDebug()<<QString("ID:%1  Name:%2  Address:%3").arg(id).arg(name).arg(address);
    }

}

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

猜你喜欢

转载自blog.csdn.net/zhudehai_1/article/details/82833635