新建
40
SmartGreenhouse.pro
Normal file
@ -0,0 +1,40 @@
|
||||
QT += core gui network sql
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
|
||||
CONFIG += c++11
|
||||
|
||||
# The following define makes your compiler emit warnings if you use
|
||||
# any Qt feature that has been marked deprecated (the exact warnings
|
||||
# depend on your compiler). Please consult the documentation of the
|
||||
# deprecated API in order to know how to port your code away from it.
|
||||
DEFINES += QT_DEPRECATED_WARNINGS
|
||||
|
||||
# You can also make your code fail to compile if it uses deprecated APIs.
|
||||
# In order to do so, uncomment the following line.
|
||||
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||
|
||||
SOURCES += \
|
||||
main.cpp \
|
||||
mainmenu.cpp \
|
||||
sql.cpp \
|
||||
submenu.cpp
|
||||
|
||||
HEADERS += \
|
||||
mainmenu.h \
|
||||
sql.h \
|
||||
submenu.h
|
||||
|
||||
FORMS += \
|
||||
mainmenu.ui \
|
||||
submenu.ui
|
||||
|
||||
# Default rules for deployment.
|
||||
qnx: target.path = /tmp/$${TARGET}/bin
|
||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||
!isEmpty(target.path): INSTALLS += target
|
||||
|
||||
DISTFILES +=
|
||||
|
||||
RESOURCES += \
|
||||
img/img.qrc
|
||||
BIN
img/OIP-C.jpg
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
img/OIP-C1.jpg
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
img/OIP-C2.jpg
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
BIN
img/R-C.jpg
Normal file
|
After Width: | Height: | Size: 128 KiB |
BIN
img/hide.png
Normal file
|
After Width: | Height: | Size: 403 B |
BIN
img/ico.png
Normal file
|
After Width: | Height: | Size: 89 KiB |
10
img/img.qrc
Normal file
@ -0,0 +1,10 @@
|
||||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>hide.png</file>
|
||||
<file>show.png</file>
|
||||
<file>ico.png</file>
|
||||
<file>R-C.jpg</file>
|
||||
<file>OIP-C.jpg</file>
|
||||
<file>OIP-C1.jpg</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
BIN
img/show.png
Normal file
|
After Width: | Height: | Size: 537 B |
11
main.cpp
Normal file
@ -0,0 +1,11 @@
|
||||
#include "mainmenu.h"
|
||||
|
||||
#include <QApplication>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
MainMenu w;
|
||||
w.show();
|
||||
return a.exec();
|
||||
}
|
||||
117
mainmenu.cpp
Normal file
@ -0,0 +1,117 @@
|
||||
#include "mainmenu.h"
|
||||
#include "ui_mainmenu.h"
|
||||
|
||||
MainMenu::MainMenu(QWidget *parent)
|
||||
: QMainWindow(parent)
|
||||
, ui(new Ui::MainMenu)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
ui->lineEdit_2->setText("admin");
|
||||
ui->lineEdit->setText("123456");
|
||||
ui->lineEdit->setEchoMode(QLineEdit::Password);
|
||||
this->setWindowIcon(QIcon(":/ico.png"));
|
||||
this->setWindowTitle("快乐不起来啊");
|
||||
|
||||
this->setAutoFillBackground(true);
|
||||
QPalette palette;
|
||||
QPixmap pixmap(":/Resources/Penguins.jpg");
|
||||
palette.setBrush(QPalette::Window, QBrush(pixmap));
|
||||
this->setPalette(palette);
|
||||
}
|
||||
|
||||
MainMenu::~MainMenu()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
||||
void MainMenu::on_pushButton_clicked()
|
||||
{
|
||||
tcpSocket = new QTcpSocket;
|
||||
QString ip = ui->lineEdit_3->text();
|
||||
tcpSocket->connectToHost(ip,7777);
|
||||
|
||||
|
||||
|
||||
connect(tcpSocket, SIGNAL(connected()), this, SLOT(show_connected()));
|
||||
connect(tcpSocket, SIGNAL(disconnected()), this, SLOT(show_disconnected()));
|
||||
}
|
||||
|
||||
void MainMenu::on_checkBox_stateChanged(int arg1)
|
||||
{
|
||||
if(arg1)
|
||||
{
|
||||
ui->lineEdit->setEchoMode(QLineEdit::Normal);
|
||||
}
|
||||
else if (!arg1)
|
||||
{
|
||||
ui->lineEdit->setEchoMode(QLineEdit::Password);
|
||||
}
|
||||
else {
|
||||
qDebug("err: ui->lineEdit->setEchoMode(QLineEdit::Password);");
|
||||
return;
|
||||
}
|
||||
return ;
|
||||
}
|
||||
void MainMenu::show_connected()
|
||||
{
|
||||
int ret = QMessageBox::information(this, tr("👨👩👦👦 登录成功"),tr("点击取消退出连接"),
|
||||
QMessageBox::Ok,
|
||||
QMessageBox::Cancel);
|
||||
if(ret == QMessageBox::Cancel)
|
||||
{
|
||||
// tcpSocket->disconnected();
|
||||
delete tcpSocket;
|
||||
return;
|
||||
}
|
||||
else {
|
||||
|
||||
|
||||
//跳转到子界面
|
||||
submenu *SubWindow = new submenu;
|
||||
connect(SubWindow,SIGNAL(widget_close()),this,SLOT(subWindowClosed() ));
|
||||
SubWindow->show();
|
||||
this->hide();
|
||||
// this->close();
|
||||
}
|
||||
|
||||
}
|
||||
void MainMenu::show_disconnected()
|
||||
{
|
||||
int ret = QMessageBox::information(this, tr("👨👩👦👦 连接断开"),tr("是否重新连接?"),
|
||||
QMessageBox::Yes,QMessageBox::No,QMessageBox::Cancel);
|
||||
if(ret == QMessageBox::Cancel)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if(ret == QMessageBox::No)
|
||||
{
|
||||
// 退出处理?
|
||||
// if(tcpSocket)
|
||||
// {
|
||||
// delete tcpSocket;
|
||||
// }
|
||||
// Sleep(20);
|
||||
return;
|
||||
}
|
||||
else if(ret == QMessageBox::Yes)
|
||||
{
|
||||
ui->pushButton->click();
|
||||
}
|
||||
else{
|
||||
qDebug("error:---");
|
||||
return ;
|
||||
}
|
||||
}
|
||||
void MainMenu::Sleep(int msec)
|
||||
{
|
||||
QTime dieTime = QTime::currentTime().addMSecs(msec);
|
||||
while( QTime::currentTime() < dieTime )
|
||||
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
|
||||
}
|
||||
void MainMenu::subWindowClosed()
|
||||
{
|
||||
show();
|
||||
tcpSocket->close();
|
||||
}
|
||||
38
mainmenu.h
Normal file
@ -0,0 +1,38 @@
|
||||
#ifndef MAINMENU_H
|
||||
#define MAINMENU_H
|
||||
|
||||
#include <QString>
|
||||
#include <QMainWindow>
|
||||
#include <QFile>
|
||||
#include <QTcpSocket> //
|
||||
#include <QHostAddress> //地址格式
|
||||
#include <QMessageBox>
|
||||
#include <QTime>
|
||||
|
||||
#include "submenu.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
namespace Ui { class MainMenu; }
|
||||
QT_END_NAMESPACE
|
||||
|
||||
class MainMenu : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MainMenu(QWidget *parent = nullptr);
|
||||
~MainMenu();
|
||||
|
||||
private slots:
|
||||
void on_pushButton_clicked();
|
||||
void on_checkBox_stateChanged(int arg1);
|
||||
void show_connected();
|
||||
void show_disconnected();
|
||||
void Sleep(int msec);
|
||||
void subWindowClosed();
|
||||
|
||||
private:
|
||||
QTcpSocket * tcpSocket;
|
||||
Ui::MainMenu *ui;
|
||||
};
|
||||
#endif // MAINMENU_H
|
||||
108
mainmenu.ui
Normal file
@ -0,0 +1,108 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainMenu</class>
|
||||
<widget class="QMainWindow" name="MainMenu">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>600</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainMenu</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<widget class="QWidget" name="layoutWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>255</x>
|
||||
<y>217</y>
|
||||
<width>183</width>
|
||||
<height>109</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>账户:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>密码:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>IP:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_2"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_3">
|
||||
<property name="text">
|
||||
<string>172.16.3.135</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton">
|
||||
<property name="text">
|
||||
<string>登录</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkBox">
|
||||
<property name="text">
|
||||
<string>显示密码</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menubar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusbar"/>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
99
sql.cpp
Normal file
@ -0,0 +1,99 @@
|
||||
#include "sql.h"
|
||||
|
||||
sql::sql()
|
||||
{
|
||||
//创建数据库
|
||||
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //添加驱动
|
||||
db.setDatabaseName("SmartGreenhouse.db"); //设置库名
|
||||
bool ok = db.open();
|
||||
if(!ok){
|
||||
qDebug("open failed");
|
||||
return ;
|
||||
}
|
||||
else {
|
||||
qDebug()<<"open success";
|
||||
}
|
||||
|
||||
//通过db创建表
|
||||
//db.exec("create table usr (name text, passwd text); ");
|
||||
|
||||
|
||||
//通过query创建表
|
||||
QSqlQuery query;
|
||||
ok = query.exec("create table if not exists user (id text, name text);");
|
||||
if(!ok){
|
||||
qDebug("failed to create user table");
|
||||
}
|
||||
else {
|
||||
// qDebug()<<"create table success";
|
||||
qDebug()<<"Student table created successfully";
|
||||
}
|
||||
ok = query.exec("create table if not exists Data (temp text, hum text,light text,co2 text);");
|
||||
if(!ok){
|
||||
qDebug("failed to create Data table");
|
||||
}
|
||||
else {
|
||||
qDebug()<<"Data table created successfully";
|
||||
}
|
||||
|
||||
|
||||
//插入数据库
|
||||
|
||||
/*QString id = ui->lineEdit->text();
|
||||
QString name = ui->lineEdit_2->text();
|
||||
|
||||
|
||||
QString sql = QString("insert into stu values ('%1','%2')").arg(id).arg(name);
|
||||
|
||||
qDebug()<<"sql:"<<sql;
|
||||
|
||||
QSqlQuery query;
|
||||
bool ok;
|
||||
ok = query.exec(sql);
|
||||
if(!ok){
|
||||
qDebug()<<"insert table failed";
|
||||
}
|
||||
else {
|
||||
qDebug()<<"insert table success";
|
||||
}*/
|
||||
|
||||
|
||||
//删除一条记录 根据学号来删除
|
||||
/*
|
||||
QString id = ui->lineEdit->text();
|
||||
|
||||
QString sql = QString("delete from stu where id='%1'").arg(id);
|
||||
|
||||
qDebug()<<"sql:"<<sql;
|
||||
|
||||
QSqlQuery query;
|
||||
bool ok;
|
||||
ok = query.exec(sql);
|
||||
if(!ok){
|
||||
qDebug()<<"delete table failed";
|
||||
}
|
||||
else {
|
||||
qDebug()<<"delete table success";
|
||||
}*/
|
||||
|
||||
//查询数据库
|
||||
|
||||
/* QString sql = QString("select * from stu;");
|
||||
|
||||
qDebug()<<"sql:"<<sql;
|
||||
|
||||
QSqlQuery query;
|
||||
bool ok;
|
||||
ok = query.exec(sql);
|
||||
if(!ok){
|
||||
qDebug()<<"select table failed";
|
||||
}
|
||||
else {
|
||||
qDebug()<<"select table success";
|
||||
}
|
||||
|
||||
while(query.next()){
|
||||
|
||||
qDebug()<< query.value("name").toString();
|
||||
}*/
|
||||
}
|
||||
15
sql.h
Normal file
@ -0,0 +1,15 @@
|
||||
#ifndef SQL_H
|
||||
#define SQL_H
|
||||
|
||||
#include <QObject>
|
||||
//#include <QSql>
|
||||
#include <QDebug>
|
||||
#include <QSqlQuery>
|
||||
#include <QSqlDatabase>
|
||||
class sql
|
||||
{
|
||||
public:
|
||||
sql();
|
||||
};
|
||||
|
||||
#endif // SQL_H
|
||||
23
submenu.cpp
Normal file
@ -0,0 +1,23 @@
|
||||
#include "submenu.h"
|
||||
#include "ui_submenu.h"
|
||||
|
||||
submenu::submenu(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::submenu)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
this->setWindowIcon(QIcon(":/ico.png"));
|
||||
this->setWindowTitle("风中有朵雨做的云");
|
||||
}
|
||||
|
||||
submenu::~submenu()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void submenu::on_pushButton_clicked()
|
||||
{
|
||||
this->hide();
|
||||
emit widget_close();
|
||||
this->close();
|
||||
}
|
||||
28
submenu.h
Normal file
@ -0,0 +1,28 @@
|
||||
#ifndef SUBMENU_H
|
||||
#define SUBMENU_H
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
namespace Ui {
|
||||
class submenu;
|
||||
}
|
||||
|
||||
class submenu : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit submenu(QWidget *parent = nullptr);
|
||||
~submenu();
|
||||
|
||||
private slots:
|
||||
void on_pushButton_clicked();
|
||||
|
||||
private:
|
||||
Ui::submenu *ui;
|
||||
signals:
|
||||
void widget_close(void);
|
||||
|
||||
};
|
||||
|
||||
#endif // SUBMENU_H
|
||||
32
submenu.ui
Normal file
@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>submenu</class>
|
||||
<widget class="QWidget" name="submenu">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<widget class="QPushButton" name="pushButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>160</x>
|
||||
<y>240</y>
|
||||
<width>75</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>退出</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||