"#include \n#include \n#include \n\nQT_CHARTS_USE_NAMESPACE\n\n// 登录界面\nclass LoginWidget : public QWidget {\npublic:\n LoginWidget(QWidget* parent = nullptr) : QWidget(parent) {\n QVBoxLayout* layout = new QVBoxLayout;\n QLabel* usernameLabel = new QLabel("Username:");\n QLabel* passwordLabel = new QLabel("Password:");\n QLineEdit* usernameLineEdit = new QLineEdit;\n QLineEdit* passwordLineEdit = new QLineEdit;\n passwordLineEdit->setEchoMode(QLineEdit::Password);\n\n QPushButton* loginButton = new QPushButton("Login");\n QPushButton* registerButton = new QPushButton("Register");\n\n layout->addWidget(usernameLabel);\n layout->addWidget(usernameLineEdit);\n layout->addWidget(passwordLabel);\n layout->addWidget(passwordLineEdit);\n layout->addWidget(loginButton);\n layout->addWidget(registerButton);\n\n setLayout(layout);\n }\n};\n\n// 注册界面\nclass RegisterWidget : public QWidget {\npublic:\n RegisterWidget(QWidget* parent = nullptr) : QWidget(parent) {\n QVBoxLayout* layout = new QVBoxLayout;\n QLabel* usernameLabel = new QLabel("Username:");\n QLabel* passwordLabel = new QLabel("Password:");\n QLineEdit* usernameLineEdit = new QLineEdit;\n QLineEdit* passwordLineEdit = new QLineEdit;\n passwordLineEdit->setEchoMode(QLineEdit::Password);\n\n QPushButton* registerButton = new QPushButton("Register");\n\n layout->addWidget(usernameLabel);\n layout->addWidget(usernameLineEdit);\n layout->addWidget(passwordLabel);\n layout->addWidget(passwordLineEdit);\n layout->addWidget(registerButton);\n\n setLayout(layout);\n }\n};\n\n// 控制界面\nclass ControlWidget : public QWidget {\npublic:\n ControlWidget(QWidget* parent = nullptr) : QWidget(parent) {\n QVBoxLayout* layout = new QVBoxLayout;\n QPushButton* lightButton = new QPushButton("Switch Light");\n QSlider* brightnessSlider = new QSlider(Qt::Horizontal);\n QPushButton* acButton = new QPushButton("Switch AC");\n QLabel* temperatureLabel = new QLabel("Temperature: 0");\n QPushButton* humidifierButton = new QPushButton("Switch Humidifier");\n QLabel* humidityLabel = new QLabel("Humidity: 0");\n QPushButton* curtainButton = new QPushButton("Switch Curtain");\n QSlider* curtainSlider = new QSlider(Qt::Horizontal);\n QComboBox* modeComboBox = new QComboBox;\n modeComboBox->addItem("Sleep Mode");\n modeComboBox->addItem("Energy Saving Mode");\n modeComboBox->addItem("Normal Mode");\n\n layout->addWidget(lightButton);\n layout->addWidget(brightnessSlider);\n layout->addWidget(acButton);\n layout->addWidget(temperatureLabel);\n layout->addWidget(humidifierButton);\n layout->addWidget(humidityLabel);\n layout->addWidget(curtainButton);\n layout->addWidget(curtainSlider);\n layout->addWidget(modeComboBox);\n\n setLayout(layout);\n }\n};\n\n// 可视化界面\nclass VisualizationWidget : public QWidget {\npublic:\n VisualizationWidget(QWidget* parent = nullptr) : QWidget(parent) {\n QVBoxLayout* layout = new QVBoxLayout;\n QChartView* chartView = new QChartView;\n QLineSeries* series = new QLineSeries;\n series->append(0, 0);\n series->append(1, 1);\n QChart* chart = new QChart;\n chart->addSeries(series);\n chartView->setChart(chart);\n\n layout->addWidget(chartView);\n\n setLayout(layout);\n }\n};\n\nint main(int argc, char** argv) {\n QApplication app(argc, argv);\n\n // 创建并显示登录界面\n LoginWidget loginWidget;\n loginWidget.show();\n\n // 创建并显示注册界面\n RegisterWidget registerWidget;\n registerWidget.show();\n\n // 创建并显示控制界面\n ControlWidget controlWidget;\n controlWidget.show();\n\n // 创建并显示可视化界面\n VisualizationWidget visualizationWidget;\n visualizationWidget.show();\n\n return app.exec();\n}\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <sys/socket.h>\n#include <netinet/in.h>\n#include <unistd.h>\n#include <sqlite3.h>\n\n#define PORT 8080\n\nint main() {\n int server_fd, new_socket;\n struct sockaddr_in address;\n int opt = 1;\n int addrlen = sizeof(address);\n char buffer[1024] = {0};\n char* hello = "Hello from server";\n\n // 创建套接字文件描述符\n if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {\n perror("socket failed");\n exit(EXIT_FAILURE);\n }\n\n // 设置套接字选项\n if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {\n perror("setsockopt failed");\n exit(EXIT_FAILURE);\n }\n\n address.sin_family = AF_INET;\n address.sin_addr.s_addr = INADDR_ANY;\n address.sin_port = htons(PORT);\n\n // 绑定套接字到指定的IP和端口\n if (bind(server_fd, (struct sockaddr*)&address, sizeof(address)) < 0) {\n perror("bind failed");\n exit(EXIT_FAILURE);\n }\n\n // 监听套接字\n if (listen(server_fd, 3) < 0) {\n perror("listen failed");\n exit(EXIT_FAILURE);\n }\n\n // 接受客户端连接\n if ((new_socket = accept(server_fd, (struct sockaddr*)&address, (socklen_t*)&addrlen)) < 0) {\n perror("accept failed");\n exit(EXIT_FAILURE);\n }\n\n // 读取客户端发送的消息\n read(new_socket, buffer, 1024);\n printf("Client: %s\n", buffer);\n\n // 将客户端发送的消息存储在数据库中\n sqlite3* db;\n char* errMsg = 0;\n int rc;\n\n rc = sqlite3_open("database.db", &db);\n if (rc) {\n fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));\n return 0;\n }\n\n char* sql = "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT, password TEXT);";\n rc = sqlite3_exec(db, sql, 0, 0, &errMsg);\n if (rc != SQLITE_OK) {\n fprintf(stderr, "SQL error: %s\n", errMsg);\n sqlite3_free(errMsg);\n }\n\n char* insertSql = "INSERT INTO users (username, password) VALUES ('user', 'password');";\n rc = sqlite3_exec(db, insertSql, 0, 0, &errMsg);\n if (rc != SQLITE_OK) {\n fprintf(stderr, "SQL error: %s\n", errMsg);\n sqlite3_free(errMsg);\n }\n\n sqlite3_close(db);\n\n // 向客户端发送消息\n send(new_socket, hello, strlen(hello), 0);\n printf("Hello message sent\n");\n\n return 0;\n}\n\n-- 创建用户表\nCREATE TABLE IF NOT EXISTS users (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n username TEXT,\n password TEXT\n);\n\n-- 创建智能家居状态表\nCREATE TABLE IF NOT EXISTS smart_home_status (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n temperature REAL,\n humidity REAL,\n timestamp DATETIME DEFAULT CURRENT_TIMESTAMP\n);\n\n-- 删除智能家居状态表中的旧数据\nDELETE FROM smart_home_status WHERE id <= (SELECT MAX(id) - 1000 FROM smart_home_status);\n

智能家居系统:基于Qt和C++的客户端与基于Linux的服务器代码

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

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