头文件:mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTcpSocket>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();
    void connected();
    void disconnected();
    void readyRead();

private:
    Ui::MainWindow *ui;
    QTcpSocket *socket;
};

#endif // MAINWINDOW_H

.cpp文件:mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    socket = new QTcpSocket(this);

    connect(socket, SIGNAL(connected()), this, SLOT(connected()));
    connect(socket, SIGNAL(disconnected()), this, SLOT(disconnected()));
    connect(socket, SIGNAL(readyRead()), this, SLOT(readyRead()));
}

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

void MainWindow::on_pushButton_clicked()
{
    ui->textEdit->clear();
    ui->textEdit->append('正在连接中...');

    socket->connectToHost('服务器IP地址', 1234); // 替换为实际的服务器IP地址和端口号
}

void MainWindow::connected()
{
    ui->textEdit->append('连接成功!');

    // 向服务器发送userid
    QString userid = '123'; // 替换为实际的userid
    socket->write(userid.toUtf8());
}

void MainWindow::disconnected()
{
    ui->textEdit->append('连接失败!');
}

void MainWindow::readyRead()
{
    QString suggestion = QString(socket->readAll());
    ui->textEdit->append(suggestion);
}

database.db

-- 创建用户表
CREATE TABLE IF NOT EXISTS users (
    uid INTEGER PRIMARY KEY AUTOINCREMENT,
    username varchar(10), 
    passwd varchar(10)
);


-- 创建智能家居状态表
CREATE TABLE IF NOT EXISTS Status (
    sid INTEGER PRIMARY KEY AUTOINCREMENT,
    uid INTEGER ,
    device_name varchar(10),
    device_state varchar(10),
    value varchar(10),
    mode varchar(10),
    FOREIGN KEY (uid) REFERENCES users (uid)
);

代码功能说明

  1. 客户端界面

    • 使用QT C++创建了一个简单的界面,包含一个QPushButton按钮和一个TextEdit文本框。
    • 点击QPushButton按钮,连接到服务器。
    • 连接成功后,发送用户ID到服务器。
    • 接收来自服务器的建议,并在TextEdit文本框中显示。
  2. 服务器端

    • 使用TCP通信接收客户端发送的用户ID。
    • 根据用户ID从SQLite数据库database.db中的Status表获取设备信息,包括设备名称、设备状态和值。
    • 分析设备信息,给出相应的建议,例如调节空调温度、加湿器湿度等。
    • 将建议信息发送回客户端。
  3. 数据库database.db

    • 包含两个表:usersStatus
    • users表存储用户信息,包括用户ID、用户名和密码。
    • Status表存储设备信息,包括设备名称、设备状态、值、模式以及用户ID。

运行流程

  1. 客户端启动,连接到服务器。
  2. 客户端发送用户ID到服务器。
  3. 服务器根据用户ID从数据库获取设备信息。
  4. 服务器分析设备信息,给出建议。
  5. 服务器将建议发送回客户端。
  6. 客户端接收建议并显示在TextEdit文本框中。

注意

  • 服务器IP地址和端口号需要根据实际情况修改。
  • 用户ID需要根据实际情况修改。
  • 建议内容需要根据具体需求进行调整。
基于QT C++和SQLite实现的智能家居状态建议系统

原文地址: https://www.cveoy.top/t/topic/fB9Y 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录