From c6db98b629bd56ecf6be0a9eabd4820a0f48a847 Mon Sep 17 00:00:00 2001 From: DongYanqi1029 Date: Thu, 1 Jul 2021 00:12:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BA=86=E7=8C=9C=E4=BD=A0?= =?UTF-8?q?=E5=96=9C=E6=AC=A2=EF=BC=8C=E5=88=86=E7=B1=BB=E6=A3=80=E7=B4=A2?= =?UTF-8?q?=EF=BC=8C=E5=8E=86=E5=8F=B2=E8=AE=B0=E5=BD=95=EF=BC=8C=E6=A6=9C?= =?UTF-8?q?=E5=8D=95=E4=BB=A5=E5=8F=8A=E6=90=9C=E7=B4=A2=E7=AD=89=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E7=9A=84=E5=9F=BA=E6=9C=AC=E6=A1=86=E6=9E=B6=EF=BC=8C?= =?UTF-8?q?=E6=8E=92=E7=89=88=E5=92=8C=E5=AE=9E=E7=8E=B0=E4=BB=8D=E7=84=B6?= =?UTF-8?q?=E7=AD=89=E5=BE=85=E6=94=B9=E8=BF=9B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ChangShaTour/ChangShaTour.pro | 13 + src/ChangShaTour/ChangShaTour.pro.user | 289 +++++++++++++-- src/ChangShaTour/addhistory.cpp | 56 +++ src/ChangShaTour/addhistory.h | 17 + src/ChangShaTour/cglobal.cpp | 7 + src/ChangShaTour/cglobal.h | 12 + src/ChangShaTour/conditionwidget.cpp | 2 +- src/ChangShaTour/conditionwidget.h | 6 +- src/ChangShaTour/confirmwidget.cpp | 2 +- src/ChangShaTour/confirmwidget.h | 7 +- src/ChangShaTour/customizewidget.cpp | 2 +- src/ChangShaTour/customizewidget.h | 6 +- src/ChangShaTour/databaseconnector.cpp | 30 +- src/ChangShaTour/databaseconnector.h | 13 +- src/ChangShaTour/favoritewidget.cpp | 2 +- src/ChangShaTour/favoritewidget.h | 6 +- src/ChangShaTour/historywidget.cpp | 113 +++++- src/ChangShaTour/historywidget.h | 40 +- src/ChangShaTour/homewidget.cpp | 4 +- src/ChangShaTour/homewidget.h | 6 +- src/ChangShaTour/imgdownloader.cpp | 2 +- src/ChangShaTour/imgdownloader.h | 6 +- src/ChangShaTour/journywidget.cpp | 2 +- src/ChangShaTour/journywidget.h | 6 +- src/ChangShaTour/listwidget.cpp | 118 +++++- src/ChangShaTour/listwidget.h | 43 ++- src/ChangShaTour/loginmanager.cpp | 36 ++ src/ChangShaTour/loginmanager.h | 20 + src/ChangShaTour/loginwidget.cpp | 18 +- src/ChangShaTour/loginwidget.h | 12 +- src/ChangShaTour/main.cpp | 2 +- src/ChangShaTour/mainwidget.cpp | 54 ++- src/ChangShaTour/mainwidget.h | 13 +- src/ChangShaTour/mainwindow.cpp | 69 +++- src/ChangShaTour/mainwindow.h | 14 +- src/ChangShaTour/planwidget.cpp | 2 +- src/ChangShaTour/planwidget.h | 6 +- src/ChangShaTour/preferencewidget.cpp | 4 +- src/ChangShaTour/preferencewidget.h | 6 +- src/ChangShaTour/recommendwidget.cpp | 163 ++++++--- src/ChangShaTour/recommendwidget.h | 21 +- src/ChangShaTour/registermanager.cpp | 75 ++++ src/ChangShaTour/registermanager.h | 24 ++ src/ChangShaTour/registerwidget.cpp | 67 ++++ src/ChangShaTour/registerwidget.h | 53 +++ src/ChangShaTour/registerwidget.ui | 21 ++ src/ChangShaTour/routechoicewidget.cpp | 2 +- src/ChangShaTour/routechoicewidget.h | 6 +- src/ChangShaTour/searchresultwidget.cpp | 261 +++++++++++++ src/ChangShaTour/searchresultwidget.h | 81 +++++ src/ChangShaTour/searchwidget.cpp | 14 + src/ChangShaTour/searchwidget.h | 22 ++ src/ChangShaTour/searchwidget.ui | 21 ++ src/ChangShaTour/showplaceinfowidget.cpp | 2 +- src/ChangShaTour/showplaceinfowidget.h | 6 +- src/ChangShaTour/showrouteinfowidget.cpp | 2 +- src/ChangShaTour/showrouteinfowidget.h | 6 +- src/ChangShaTour/sortwidget.cpp | 442 ++++++++++++++++++++++- src/ChangShaTour/sortwidget.h | 74 +++- src/ChangShaTour/userinfowidget.cpp | 42 ++- src/ChangShaTour/userinfowidget.h | 10 +- src/ChangShaTour/userwidget.cpp | 4 +- src/ChangShaTour/userwidget.h | 6 +- src/ChangShaTour/webwidget.cpp | 20 +- src/ChangShaTour/webwidget.h | 23 +- 65 files changed, 2359 insertions(+), 175 deletions(-) create mode 100644 src/ChangShaTour/addhistory.cpp create mode 100644 src/ChangShaTour/addhistory.h create mode 100644 src/ChangShaTour/cglobal.cpp create mode 100644 src/ChangShaTour/cglobal.h create mode 100644 src/ChangShaTour/loginmanager.cpp create mode 100644 src/ChangShaTour/loginmanager.h create mode 100644 src/ChangShaTour/registermanager.cpp create mode 100644 src/ChangShaTour/registermanager.h create mode 100644 src/ChangShaTour/registerwidget.cpp create mode 100644 src/ChangShaTour/registerwidget.h create mode 100644 src/ChangShaTour/registerwidget.ui create mode 100644 src/ChangShaTour/searchresultwidget.cpp create mode 100644 src/ChangShaTour/searchresultwidget.h create mode 100644 src/ChangShaTour/searchwidget.cpp create mode 100644 src/ChangShaTour/searchwidget.h create mode 100644 src/ChangShaTour/searchwidget.ui diff --git a/src/ChangShaTour/ChangShaTour.pro b/src/ChangShaTour/ChangShaTour.pro index 3807e0c..a63e201 100644 --- a/src/ChangShaTour/ChangShaTour.pro +++ b/src/ChangShaTour/ChangShaTour.pro @@ -16,6 +16,8 @@ DEFINES += QT_DEPRECATED_WARNINGS #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ + addhistory.cpp \ + cglobal.cpp \ conditionwidget.cpp \ confirmwidget.cpp \ customizewidget.cpp \ @@ -26,6 +28,7 @@ SOURCES += \ imgdownloader.cpp \ journywidget.cpp \ listwidget.cpp \ + loginmanager.cpp \ loginwidget.cpp \ main.cpp \ mainwidget.cpp \ @@ -33,7 +36,10 @@ SOURCES += \ planwidget.cpp \ preferencewidget.cpp \ recommendwidget.cpp \ + registermanager.cpp \ + registerwidget.cpp \ routechoicewidget.cpp \ + searchresultwidget.cpp \ showplaceinfowidget.cpp \ showrouteinfowidget.cpp \ sortwidget.cpp \ @@ -42,6 +48,8 @@ SOURCES += \ webwidget.cpp HEADERS += \ + addhistory.h \ + cglobal.h \ conditionwidget.h \ confirmwidget.h \ customizewidget.h \ @@ -52,13 +60,17 @@ HEADERS += \ imgdownloader.h \ journywidget.h \ listwidget.h \ + loginmanager.h \ loginwidget.h \ mainwidget.h \ mainwindow.h \ planwidget.h \ preferencewidget.h \ recommendwidget.h \ + registermanager.h \ + registerwidget.h \ routechoicewidget.h \ + searchresultwidget.h \ showplaceinfowidget.h \ showrouteinfowidget.h \ sortwidget.h \ @@ -82,6 +94,7 @@ FORMS += \ planwidget.ui \ preferencewidget.ui \ recommendwidget.ui \ + registerwidget.ui \ routechoicewidget.ui \ showplaceinfowidget.ui \ showrouteinfowidget.ui \ diff --git a/src/ChangShaTour/ChangShaTour.pro.user b/src/ChangShaTour/ChangShaTour.pro.user index 54b70f7..ba3d579 100644 --- a/src/ChangShaTour/ChangShaTour.pro.user +++ b/src/ChangShaTour/ChangShaTour.pro.user @@ -1,14 +1,14 @@ - + EnvironmentId - {4109ff11-a646-43d1-9619-aeb32783df6e} + {61ba832e-6c30-4ab6-b0b8-ace44f46ca0c} ProjectExplorer.Project.ActiveTarget - 1 + 0 ProjectExplorer.Project.EditorSettings @@ -44,8 +44,8 @@ true 0 8 - true - 1 + false + 0 true true true @@ -64,14 +64,257 @@ ProjectExplorer.Project.Target.0 - Desktop Qt 5.14.2 MinGW 64-bit - Desktop Qt 5.14.2 MinGW 64-bit - qt.qt5.5142.win64_mingw73_kit + Desktop Qt 5.14.2 MSVC2017 64bit + Desktop Qt 5.14.2 MSVC2017 64bit + qt.qt5.5142.win64_msvc2017_64_kit + 0 + 0 + 0 + + D:/Study/SE/project/code/Trip-in-Chang-sha-main-4/Trip-in-Chang-sha-main/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug + + + true + QtProjectManager.QMakeBuildStep + true + + false + false + false + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + + + D:/Study/SE/project/code/Trip-in-Chang-sha-main-4/Trip-in-Chang-sha-main/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Release + + + true + QtProjectManager.QMakeBuildStep + false + + false + false + true + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + + + D:/Study/SE/project/code/Trip-in-Chang-sha-main-4/Trip-in-Chang-sha-main/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Profile + + + true + QtProjectManager.QMakeBuildStep + true + + false + true + true + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + + 3 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + Qt4ProjectManager.Qt4RunConfiguration:D:/ChangShaTour/ChangShaTour.pro + D:/ChangShaTour/ChangShaTour.pro + + false + + false + true + true + false + false + true + + D:/Study/SE/project/code/Trip-in-Chang-sha-main-4/Trip-in-Chang-sha-main/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug + + 1 + + + + ProjectExplorer.Project.Target.1 + + Desktop Qt 5.14.2 MinGW 32-bit + Desktop Qt 5.14.2 MinGW 32-bit + qt.qt5.5142.win32_mingw73_kit 0 0 0 - E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Debug + D:/Study/SE/project/code/Trip-in-Chang-sha-main-4/Trip-in-Chang-sha-main/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_32_bit-Debug true @@ -119,7 +362,7 @@ 2 - E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Release + D:/Study/SE/project/code/Trip-in-Chang-sha-main-4/Trip-in-Chang-sha-main/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_32_bit-Release true @@ -167,7 +410,7 @@ 0 - E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Profile + D:/Study/SE/project/code/Trip-in-Chang-sha-main-4/Trip-in-Chang-sha-main/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_32_bit-Profile true @@ -305,16 +548,16 @@ - ProjectExplorer.Project.Target.1 + ProjectExplorer.Project.Target.2 - Desktop Qt 5.14.2 MSVC2017 64bit - Desktop Qt 5.14.2 MSVC2017 64bit - qt.qt5.5142.win64_msvc2017_64_kit + Desktop Qt 5.14.2 MinGW 64-bit + Desktop Qt 5.14.2 MinGW 64-bit + qt.qt5.5142.win64_mingw73_kit 0 0 0 - E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug + D:/Study/SE/project/code/Trip-in-Chang-sha-main-4/Trip-in-Chang-sha-main/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Debug true @@ -362,7 +605,7 @@ 2 - E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Release + D:/Study/SE/project/code/Trip-in-Chang-sha-main-4/Trip-in-Chang-sha-main/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Release true @@ -410,7 +653,7 @@ 0 - E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Profile + D:/Study/SE/project/code/Trip-in-Chang-sha-main-4/Trip-in-Chang-sha-main/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Profile true @@ -530,26 +773,26 @@ 2 - Qt4ProjectManager.Qt4RunConfiguration:E:/ChangShaTour/Trip-in-Chang-sha/ChangShaTour/ChangShaTour.pro - E:/ChangShaTour/Trip-in-Chang-sha/ChangShaTour/ChangShaTour.pro + + ProjectExplorer.CustomExecutableRunConfiguration + false false true - true false false true - E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug + 1 ProjectExplorer.Project.TargetCount - 2 + 3 ProjectExplorer.Project.Updater.FileVersion diff --git a/src/ChangShaTour/addhistory.cpp b/src/ChangShaTour/addhistory.cpp new file mode 100644 index 0000000..0c47a92 --- /dev/null +++ b/src/ChangShaTour/addhistory.cpp @@ -0,0 +1,56 @@ +#include "addhistory.h" +#include "cglobal.h" +//将店铺的连接加入history数据库 +AddHistory::AddHistory() +{ + +} +void AddHistory::add(QString url) +{ + connect=new DatabaseConnector(); + QString database="user"; + limit=10; + connect->connectToDatabase(database); + QSqlQuery query(db); + query.prepare("select historyId from history where url=?"); + query.addBindValue(url); + query.exec(); + query.next(); + if(query.isValid()) + { + query.prepare("update history set createdtime = now() where url=?"); + query.addBindValue(url); + query.exec(); + query.finish(); + connect->closeDatabase(); + return ; + } + query.prepare("select count(*) from history where id = ?"); + query.addBindValue(Id); + query.exec(); + query.next(); + int count=query.value(0).toInt(); + if(count>=limit) + { + query.prepare("select historyId from history where id = ? order by createdtime"); + query.addBindValue(Id); + query.exec(); + query.next(); + int historyId=query.value("historyId").toInt(); + query.prepare("update history set url = ?, createdtime = now() where historyId=?"); + query.addBindValue(url); + query.addBindValue(historyId); + query.exec(); + } + else + { + + query.prepare("insert into history (id,url)values(?,?)"); + query.addBindValue(Id); + query.addBindValue(url); + query.exec(); + } + query.finish(); + connect->closeDatabase(); + +} diff --git a/src/ChangShaTour/addhistory.h b/src/ChangShaTour/addhistory.h new file mode 100644 index 0000000..9edceb8 --- /dev/null +++ b/src/ChangShaTour/addhistory.h @@ -0,0 +1,17 @@ +#ifndef ADDHISTORY_H +#define ADDHISTORY_H +#include +#include +#include + +class AddHistory +{ +public: + AddHistory(); + void add(QString id); +private: + int limit; + DatabaseConnector *connect; +}; + +#endif // ADDHISTORY_H diff --git a/src/ChangShaTour/cglobal.cpp b/src/ChangShaTour/cglobal.cpp new file mode 100644 index 0000000..094fd19 --- /dev/null +++ b/src/ChangShaTour/cglobal.cpp @@ -0,0 +1,7 @@ +#include "cglobal.h" +qint64 Id; + +cglobal::cglobal() +{ + +} diff --git a/src/ChangShaTour/cglobal.h b/src/ChangShaTour/cglobal.h new file mode 100644 index 0000000..bb742fb --- /dev/null +++ b/src/ChangShaTour/cglobal.h @@ -0,0 +1,12 @@ +#ifndef CGLOBAL_H +#define CGLOBAL_H +#include +//全局变量定义文件,include该文件即可获得用户Id +extern qint64 Id; +class cglobal +{ +public: + cglobal(); +}; + +#endif // CGLOBAL_H diff --git a/src/ChangShaTour/conditionwidget.cpp b/src/ChangShaTour/conditionwidget.cpp index 8699e28..360f8df 100644 --- a/src/ChangShaTour/conditionwidget.cpp +++ b/src/ChangShaTour/conditionwidget.cpp @@ -1,4 +1,4 @@ -#include "conditionwidget.h" +#include "conditionwidget.h" #include "ui_conditionwidget.h" ConditionWidget::ConditionWidget(QWidget *parent) : diff --git a/src/ChangShaTour/conditionwidget.h b/src/ChangShaTour/conditionwidget.h index 4e9d515..8e8cb27 100644 --- a/src/ChangShaTour/conditionwidget.h +++ b/src/ChangShaTour/conditionwidget.h @@ -1,4 +1,4 @@ -#ifndef CONDITIONWIDGET_H +#ifndef CONDITIONWIDGET_H #define CONDITIONWIDGET_H #include @@ -8,6 +8,10 @@ #include #include +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + namespace Ui { class ConditionWidget; } diff --git a/src/ChangShaTour/confirmwidget.cpp b/src/ChangShaTour/confirmwidget.cpp index 776b786..8104cfc 100644 --- a/src/ChangShaTour/confirmwidget.cpp +++ b/src/ChangShaTour/confirmwidget.cpp @@ -1,4 +1,4 @@ -#include "confirmwidget.h" +#include "confirmwidget.h" #include "ui_confirmwidget.h" #include diff --git a/src/ChangShaTour/confirmwidget.h b/src/ChangShaTour/confirmwidget.h index f90d60d..436630f 100644 --- a/src/ChangShaTour/confirmwidget.h +++ b/src/ChangShaTour/confirmwidget.h @@ -1,10 +1,15 @@ -#ifndef CONFIRMWIDGET_H +#ifndef CONFIRMWIDGET_H #define CONFIRMWIDGET_H #include #include #include + +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + namespace Ui { class ConfirmWidget; } diff --git a/src/ChangShaTour/customizewidget.cpp b/src/ChangShaTour/customizewidget.cpp index 0d2ee78..9128839 100644 --- a/src/ChangShaTour/customizewidget.cpp +++ b/src/ChangShaTour/customizewidget.cpp @@ -1,4 +1,4 @@ -#include "customizewidget.h" +#include "customizewidget.h" #include "ui_customizewidget.h" CustomizeWidget::CustomizeWidget(QWidget *parent) : diff --git a/src/ChangShaTour/customizewidget.h b/src/ChangShaTour/customizewidget.h index f2d9396..9ac9a89 100644 --- a/src/ChangShaTour/customizewidget.h +++ b/src/ChangShaTour/customizewidget.h @@ -1,8 +1,12 @@ -#ifndef CUSTOMIZEWIDGET_H +#ifndef CUSTOMIZEWIDGET_H #define CUSTOMIZEWIDGET_H #include +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + namespace Ui { class CustomizeWidget; } diff --git a/src/ChangShaTour/databaseconnector.cpp b/src/ChangShaTour/databaseconnector.cpp index f544653..21546de 100644 --- a/src/ChangShaTour/databaseconnector.cpp +++ b/src/ChangShaTour/databaseconnector.cpp @@ -1,28 +1,24 @@ -#include "databaseconnector.h" +#include "databaseconnector.h" + +QSqlDatabase db; DatabaseConnector::DatabaseConnector() { - QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); //连接的MYSQL的数据库驱动 - this->db = db; } -QSqlDatabase DatabaseConnector::connectToDatabase() +void DatabaseConnector::connectToDatabase(QString database) { - this->db.setHostName("121.36.100.63"); //主机名 - this->db.setPort(3306); //端口 - this->db.setDatabaseName("meituan"); //数据库名 - this->db.setUserName("mkl"); //用户名 - this->db.setPassword("010512"); //密码 - this->db.open(); - return this->db; + db = QSqlDatabase::addDatabase("QMYSQL"); //连接的MYSQL的数据库驱动 + db.setHostName("121.36.100.63"); //主机名 + db.setPort(3306); //端口 + db.setDatabaseName(database); //数据库名 + db.setUserName("mkl"); //用户名 + db.setPassword("010512"); //密码 + db.open(); } void DatabaseConnector::closeDatabase() { - this->db.close(); -} - -DatabaseConnector::~DatabaseConnector() -{ - ; + db.close(); + QSqlDatabase::removeDatabase("qt_sql_default_connection"); } diff --git a/src/ChangShaTour/databaseconnector.h b/src/ChangShaTour/databaseconnector.h index 21fadd5..cce0f51 100644 --- a/src/ChangShaTour/databaseconnector.h +++ b/src/ChangShaTour/databaseconnector.h @@ -1,18 +1,23 @@ -#ifndef DATABASECONNECTOR_H +#ifndef DATABASECONNECTOR_H #define DATABASECONNECTOR_H #include +#include + +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + +extern QSqlDatabase db; class DatabaseConnector { private: - QSqlDatabase db; public: DatabaseConnector(); - ~DatabaseConnector(); - QSqlDatabase connectToDatabase(); + void connectToDatabase(QString database); void closeDatabase(); }; diff --git a/src/ChangShaTour/favoritewidget.cpp b/src/ChangShaTour/favoritewidget.cpp index f706e10..f4eab10 100644 --- a/src/ChangShaTour/favoritewidget.cpp +++ b/src/ChangShaTour/favoritewidget.cpp @@ -1,4 +1,4 @@ -#include "favoritewidget.h" +#include "favoritewidget.h" #include "ui_favoritewidget.h" #include diff --git a/src/ChangShaTour/favoritewidget.h b/src/ChangShaTour/favoritewidget.h index 839fc81..cea83bb 100644 --- a/src/ChangShaTour/favoritewidget.h +++ b/src/ChangShaTour/favoritewidget.h @@ -1,8 +1,12 @@ -#ifndef FAVORITEWIDGET_H +#ifndef FAVORITEWIDGET_H #define FAVORITEWIDGET_H #include +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + namespace Ui { class FavoriteWidget; } diff --git a/src/ChangShaTour/historywidget.cpp b/src/ChangShaTour/historywidget.cpp index 275cef7..abbe7c4 100644 --- a/src/ChangShaTour/historywidget.cpp +++ b/src/ChangShaTour/historywidget.cpp @@ -1,4 +1,4 @@ -#include "historywidget.h" +#include "historywidget.h" #include "ui_historywidget.h" HistoryWidget::HistoryWidget(QWidget *parent) : @@ -6,9 +6,120 @@ HistoryWidget::HistoryWidget(QWidget *parent) : ui(new Ui::HistoryWidget) { ui->setupUi(this); + + limit = 10; + history = new AddHistory(); + + mainLayout = new QVBoxLayout(); + + subWidget = new QWidget(); + web = new WebWidget(); + + verLayout = new QVBoxLayout(); + + refreshBtn = new QPushButton("刷新"); + btnList = (QPushButton **)malloc(sizeof(QPushButton *) * limit); + for (int i = 0; i < limit; i++) + { + btnList[i] = new QPushButton(); + } + + userConn = new DatabaseConnector(); + + //获取用户历史信息存入historyList + getHistory(); + //根据历史信息获取店铺信息填入nameList中 + getShops(); + //填写nameList信息到按钮中 + setBtns(); + + //设置布局 + this->setLayout(mainLayout); + + mainLayout->addWidget(subWidget); + mainLayout->addWidget(web); + web->setVisible(false); + + subWidget->setLayout(verLayout); + + verLayout->addWidget(refreshBtn, 1); + for (int i = 0; i < limit; i++) + { + verLayout->addWidget(btnList[i], 3); + } + + connect(refreshBtn, &QPushButton::clicked, this, &HistoryWidget::refresh); + connect(web->getReturnBtn(), &QPushButton::clicked, this, &HistoryWidget::returnHistory); } HistoryWidget::~HistoryWidget() { delete ui; } + + +void HistoryWidget::getHistory() +{ + QString userDatabase="user"; + userConn->connectToDatabase(userDatabase); + QSqlQuery historyQuery(db); + + historyQuery.prepare("select url from history where id=:id order by createdtime DESC"); + historyQuery.bindValue(":id", Id); + historyQuery.exec(); + while (historyQuery.next() == true) + { +// qDebug() << historyQuery.value("url").value(); + historyList.append(historyQuery.value("url").value()); + } + historyQuery.finish(); + userConn->closeDatabase(); +} + + +void HistoryWidget::getShops() +{ + QString shopDatabase="meituan";// + shopConn = new DatabaseConnector(); + shopConn->connectToDatabase(shopDatabase); + QSqlQuery shopQuery(db); + + for (int i = 0; i < historyList.length(); i++) + { + shopQuery.prepare("select title from food where detail=:url"); + shopQuery.bindValue(":url", historyList[i]); + shopQuery.exec(); + shopQuery.next(); +// qDebug() << shopQuery.value("title").value(); + nameList.append(shopQuery.value("title").value()); + } + shopQuery.finish(); + shopConn->closeDatabase(); +} + +void HistoryWidget::setBtns() +{ + for (int i = 0; i < historyList.length(); i++) + { + btnList[i]->setText(nameList[i]); +// btnList[i]->setFixedSize(QSize(200,200)); + connect(btnList[i], &QPushButton::clicked, this, [=](){web->loadPage(historyList[i]); history->add(historyList[i]); web->setVisible(true); subWidget->setVisible(false);}); + } +} + + +void HistoryWidget::refresh() +{ + historyList.clear(); + nameList.clear(); + + getHistory(); + getShops(); + setBtns(); +} + +void HistoryWidget::returnHistory() +{ + web->setVisible(false); + subWidget->setVisible(true); +} diff --git a/src/ChangShaTour/historywidget.h b/src/ChangShaTour/historywidget.h index a6535d3..e59de87 100644 --- a/src/ChangShaTour/historywidget.h +++ b/src/ChangShaTour/historywidget.h @@ -1,7 +1,19 @@ -#ifndef HISTORYWIDGET_H +#ifndef HISTORYWIDGET_H #define HISTORYWIDGET_H #include +#include +#include +#include +#include +#include "webwidget.h" +#include "cglobal.h" +#include "databaseconnector.h" +#include "addhistory.h" + +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif namespace Ui { class HistoryWidget; @@ -15,8 +27,34 @@ public: explicit HistoryWidget(QWidget *parent = nullptr); ~HistoryWidget(); + void getHistory(); + void getShops(); + void setBtns(); + void refresh(); + void returnHistory(); + + + private: Ui::HistoryWidget *ui; + + int limit; + AddHistory *history; + + QVBoxLayout *mainLayout; + + QWidget *subWidget; + WebWidget *web; + + QVBoxLayout *verLayout; + QPushButton *refreshBtn; + QPushButton **btnList; + + QStringList historyList; //店铺url + QStringList nameList; //店铺名称 + + DatabaseConnector *userConn; + DatabaseConnector *shopConn; }; #endif // HISTORYWIDGET_H diff --git a/src/ChangShaTour/homewidget.cpp b/src/ChangShaTour/homewidget.cpp index 29c6ba7..e6f9bec 100644 --- a/src/ChangShaTour/homewidget.cpp +++ b/src/ChangShaTour/homewidget.cpp @@ -1,4 +1,4 @@ -#include "homewidget.h" +#include "homewidget.h" #include "ui_homewidget.h" HomeWidget::HomeWidget(QWidget *parent) : @@ -12,7 +12,7 @@ HomeWidget::HomeWidget(QWidget *parent) : horLayout = new QHBoxLayout(); rcmdBtn = new QPushButton("猜你喜欢"); listBtn = new QPushButton("热门榜单"); - sortBtn = new QPushButton("Sort"); + sortBtn = new QPushButton("分类筛选"); planBtn = new QPushButton("方案定制"); //默认选择显示“猜你喜欢”界面 pageIndex = 0; diff --git a/src/ChangShaTour/homewidget.h b/src/ChangShaTour/homewidget.h index db869f8..4fd0b46 100644 --- a/src/ChangShaTour/homewidget.h +++ b/src/ChangShaTour/homewidget.h @@ -1,4 +1,4 @@ -#ifndef HOMEWIDGET_H +#ifndef HOMEWIDGET_H #define HOMEWIDGET_H #include @@ -10,6 +10,10 @@ #include "sortwidget.h" #include "planwidget.h" +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + namespace Ui { class HomeWidget; } diff --git a/src/ChangShaTour/imgdownloader.cpp b/src/ChangShaTour/imgdownloader.cpp index e7aeb0d..3cf16dc 100644 --- a/src/ChangShaTour/imgdownloader.cpp +++ b/src/ChangShaTour/imgdownloader.cpp @@ -1,4 +1,4 @@ -#include "imgdownloader.h" +#include "imgdownloader.h" imgDownloader::imgDownloader() { diff --git a/src/ChangShaTour/imgdownloader.h b/src/ChangShaTour/imgdownloader.h index 35c3bd4..7140aa5 100644 --- a/src/ChangShaTour/imgdownloader.h +++ b/src/ChangShaTour/imgdownloader.h @@ -1,4 +1,4 @@ -#ifndef IMGDOWNLOADER_H +#ifndef IMGDOWNLOADER_H #define IMGDOWNLOADER_H #include @@ -13,6 +13,10 @@ #include +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + class imgDownloader { public: diff --git a/src/ChangShaTour/journywidget.cpp b/src/ChangShaTour/journywidget.cpp index fd36e56..42003d0 100644 --- a/src/ChangShaTour/journywidget.cpp +++ b/src/ChangShaTour/journywidget.cpp @@ -1,4 +1,4 @@ -#include "journywidget.h" +#include "journywidget.h" #include "ui_journywidget.h" JournyWidget::JournyWidget(QWidget *parent) : diff --git a/src/ChangShaTour/journywidget.h b/src/ChangShaTour/journywidget.h index 88ad74b..fdeba91 100644 --- a/src/ChangShaTour/journywidget.h +++ b/src/ChangShaTour/journywidget.h @@ -1,8 +1,12 @@ -#ifndef JOURNYWIDGET_H +#ifndef JOURNYWIDGET_H #define JOURNYWIDGET_H #include +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + namespace Ui { class JournyWidget; } diff --git a/src/ChangShaTour/listwidget.cpp b/src/ChangShaTour/listwidget.cpp index 70cd31d..3d9294d 100644 --- a/src/ChangShaTour/listwidget.cpp +++ b/src/ChangShaTour/listwidget.cpp @@ -1,4 +1,4 @@ -#include "listwidget.h" +#include "listwidget.h" #include "ui_listwidget.h" #include @@ -10,13 +10,123 @@ ListWidget::ListWidget(QWidget *parent) : { ui->setupUi(this); - QVBoxLayout *layout = new QVBoxLayout(); + listLen = 8; + mainLayout = new QVBoxLayout(); - setLayout(layout); - layout->addWidget(new QLabel("ListWidget")); + subWidget = new QWidget(); + listLayout = new QHBoxLayout(); + layout_1 = new QVBoxLayout(); + layout_2 = new QVBoxLayout(); + layout_3 = new QVBoxLayout(); + title_1 = new QLabel(); + title_2 = new QLabel(); + title_3 = new QLabel(); + + //lineList第一行是标题行,其余listLen个是按钮行 + lineList_1 = (QHBoxLayout **)malloc(sizeof(QHBoxLayout *) * (listLen + 1)); + lineList_2 = (QHBoxLayout **)malloc(sizeof(QHBoxLayout *) * (listLen + 1)); + lineList_3 = (QHBoxLayout **)malloc(sizeof(QHBoxLayout *) * (listLen + 1)); + rankList_1 = (QLabel **)malloc(sizeof(QLabel *) * listLen); + rankList_2 = (QLabel **)malloc(sizeof(QLabel *) * listLen); + rankList_3 = (QLabel **)malloc(sizeof(QLabel *) * listLen); + btnList_1 = (QToolButton **)malloc(sizeof(QToolButton *) * listLen); + btnList_2 = (QToolButton **)malloc(sizeof(QToolButton *) * listLen); + btnList_3 = (QToolButton **)malloc(sizeof(QToolButton *) * listLen); + + web = new WebWidget(); + + title_1->setText("热门榜单"); + title_1->setAlignment(Qt::AlignCenter); + title_1->setFont(QFont( "Timers", 15, QFont::Bold) ); + title_2->setText("小众榜单"); + title_2->setAlignment(Qt::AlignCenter); + title_2->setFont(QFont( "Timers", 15, QFont::Bold) ); + title_3->setText("好评榜单"); + title_3->setAlignment(Qt::AlignCenter); + title_3->setFont(QFont( "Timers", 15, QFont::Bold) ); + + for (int i = 0; i < (listLen + 1); i++) + { + QHBoxLayout *line_1 = new QHBoxLayout(); + QHBoxLayout *line_2 = new QHBoxLayout(); + QHBoxLayout *line_3 = new QHBoxLayout(); + if (i > 0) + { + QLabel *rank_1 = new QLabel(QString::number(i)); + rank_1->setAlignment(Qt::AlignCenter); + QLabel *rank_2 = new QLabel(QString::number(i)); + rank_2->setAlignment(Qt::AlignCenter); + QLabel *rank_3 = new QLabel(QString::number(i)); + rank_3->setAlignment(Qt::AlignCenter); + QToolButton *btn_1 = new QToolButton(); + QToolButton *btn_2 = new QToolButton(); + QToolButton *btn_3 = new QToolButton(); + btn_1 = setBtn(btn_1, "D:/Study/SE/project/images/transparent.png", "1btn" + QString::number(i)); + btn_2 = setBtn(btn_2, "D:/Study/SE/project/images/transparent.png", "2btn" + QString::number(i)); + btn_3 = setBtn(btn_3, "D:/Study/SE/project/images/transparent.png", "3btn" + QString::number(i)); + + //设置布局 + line_1->addWidget(rank_1, 1); + line_1->addWidget(btn_1, 10); + line_2->addWidget(rank_2, 1); + line_2->addWidget(btn_2, 10); + line_3->addWidget(rank_3, 1); + line_3->addWidget(btn_3, 10); + //添加入列表 + rankList_1[i - 1] = rank_1; + rankList_2[i - 1] = rank_2; + rankList_3[i - 1] = rank_3; + btnList_1[i - 1] = btn_1; + btnList_2[i - 1] = btn_2; + btnList_3[i - 1] = btn_3; + //为每个按钮连接跳转界面信号,并添加历史记录 + } + else + { + line_1->addWidget(title_1); + line_2->addWidget(title_2); + line_3->addWidget(title_3); + } + + lineList_1[i] = line_1; + lineList_2[i] = line_2; + lineList_3[i] = line_3; + } + + //设置总体布局 + this->setLayout(mainLayout); + + mainLayout->addWidget(subWidget); + mainLayout->addWidget(web); + web->setVisible(false); + + subWidget->setLayout(listLayout); + listLayout->addLayout(layout_1, 1); + listLayout->addLayout(layout_2, 1); + listLayout->addLayout(layout_3, 1); + +// layout_1->setSizeConstraint(QLayout::SetMinimumSize); + + for (int i = 0; i < (listLen + 1); i++) + { + layout_1->addLayout(lineList_1[i]); + layout_2->addLayout(lineList_2[i]); + layout_3->addLayout(lineList_3[i]); + } } ListWidget::~ListWidget() { delete ui; } + +QToolButton *ListWidget::setBtn(QToolButton *btn, const QString iconPath, const QString text) +{ + btn->setIcon(QIcon(iconPath)); + btn->setText(text); + btn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + btn->setIconSize(QSize(100,200)); + btn->setFixedSize(400,250); + + return btn; +} diff --git a/src/ChangShaTour/listwidget.h b/src/ChangShaTour/listwidget.h index 905c993..49145ab 100644 --- a/src/ChangShaTour/listwidget.h +++ b/src/ChangShaTour/listwidget.h @@ -1,7 +1,19 @@ -#ifndef LISTWIDGET_H +#ifndef LISTWIDGET_H #define LISTWIDGET_H #include +#include +#include +#include +#include +#include +#include +#include +#include "webwidget.h" + +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif namespace Ui { class ListWidget; @@ -15,8 +27,37 @@ public: explicit ListWidget(QWidget *parent = nullptr); ~ListWidget(); + QToolButton *setBtn(QToolButton *btn, const QString iconPath, const QString text); + + private: Ui::ListWidget *ui; + + int listLen; + + QVBoxLayout *mainLayout; + + QWidget *subWidget; + QHBoxLayout *listLayout; + QVBoxLayout *layout_1; + QVBoxLayout *layout_2; + QVBoxLayout *layout_3; + QLabel *title_1; + QLabel *title_2; + QLabel *title_3; + + QHBoxLayout **lineList_1; + QHBoxLayout **lineList_2; + QHBoxLayout **lineList_3; + + QLabel **rankList_1; + QLabel **rankList_2; + QLabel **rankList_3; + QToolButton **btnList_1; + QToolButton **btnList_2; + QToolButton **btnList_3; + + WebWidget *web; }; #endif // LISTWIDGET_H diff --git a/src/ChangShaTour/loginmanager.cpp b/src/ChangShaTour/loginmanager.cpp new file mode 100644 index 0000000..4502c84 --- /dev/null +++ b/src/ChangShaTour/loginmanager.cpp @@ -0,0 +1,36 @@ +#include "loginmanager.h" +#include "cglobal.h" + +LoginManager::LoginManager() +{ + +} +bool LoginManager::loginVerify(QString account,QString password) +{ + connect=new DatabaseConnector(); + QString database="user"; + connect->connectToDatabase(database); + + QSqlQuery query(db); + query.prepare("select id,password from account where email=?"); + query.addBindValue(account); + query.exec(); + query.next(); + QString passwordget=query.value("password").toString(); + Id=query.value("id").toInt(); + qDebug()<closeDatabase(); + return true; + } + else + { + query.finish(); + connect->closeDatabase(); + return false; + } + +} diff --git a/src/ChangShaTour/loginmanager.h b/src/ChangShaTour/loginmanager.h new file mode 100644 index 0000000..0835238 --- /dev/null +++ b/src/ChangShaTour/loginmanager.h @@ -0,0 +1,20 @@ +#ifndef LOGINMANAGER_H +#define LOGINMANAGER_H + +#include "databaseconnector.h" +#include +#include +#include + + +class LoginManager +{ +public: + LoginManager(); + bool loginVerify(QString account,QString password); +private: + DatabaseConnector * connect; + +}; + +#endif // LOGINMANAGER_H diff --git a/src/ChangShaTour/loginwidget.cpp b/src/ChangShaTour/loginwidget.cpp index 54701d8..3fc15da 100644 --- a/src/ChangShaTour/loginwidget.cpp +++ b/src/ChangShaTour/loginwidget.cpp @@ -1,6 +1,7 @@ -#include "loginwidget.h" +#include "loginwidget.h" #include "ui_loginwidget.h" + LoginWidget::LoginWidget(QWidget *parent) : QWidget(parent), ui(new Ui::LoginWidget) @@ -35,11 +36,22 @@ LoginWidget::LoginWidget(QWidget *parent) : this->setLayout(verticalLayout); } -QPushButton * LoginWidget::GetLoginButton() +QPushButton * LoginWidget::getLoginButton() { return loginButton; } - +QString LoginWidget::getAccount() +{ + return accountLine->text(); +} +QString LoginWidget::getPassword() +{ + return passwordLine->text(); +} +QPushButton * LoginWidget::getRegisterButton() +{ + return registerButton; +} LoginWidget::~LoginWidget() { delete ui; diff --git a/src/ChangShaTour/loginwidget.h b/src/ChangShaTour/loginwidget.h index 72c9d93..7f42464 100644 --- a/src/ChangShaTour/loginwidget.h +++ b/src/ChangShaTour/loginwidget.h @@ -1,4 +1,4 @@ -#ifndef LOGINWIDGET_H +#ifndef LOGINWIDGET_H #define LOGINWIDGET_H #include @@ -6,6 +6,11 @@ #include #include #include +#include + +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif namespace Ui { class LoginWidget; @@ -19,7 +24,10 @@ public: explicit LoginWidget(QWidget *parent = nullptr); ~LoginWidget(); - QPushButton * GetLoginButton(); + QPushButton * getLoginButton(); + QString getAccount(); + QString getPassword(); + QPushButton * getRegisterButton(); private: Ui::LoginWidget *ui; diff --git a/src/ChangShaTour/main.cpp b/src/ChangShaTour/main.cpp index 7dc5ed6..ed639b8 100644 --- a/src/ChangShaTour/main.cpp +++ b/src/ChangShaTour/main.cpp @@ -1,4 +1,4 @@ -#include "mainwindow.h" +#include "mainwindow.h" #include diff --git a/src/ChangShaTour/mainwidget.cpp b/src/ChangShaTour/mainwidget.cpp index de4c11d..b1a9231 100644 --- a/src/ChangShaTour/mainwidget.cpp +++ b/src/ChangShaTour/mainwidget.cpp @@ -1,4 +1,4 @@ -#include "mainwidget.h" +#include "mainwidget.h" #include "ui_mainwidget.h" MainWidget::MainWidget(QWidget *parent) : @@ -15,19 +15,23 @@ MainWidget::MainWidget(QWidget *parent) : searchBar = new QLineEdit(); searchBtn = new QPushButton("搜索"); //首页按钮默认选中 - atHome = true; + index = 0; //homeBtn->setStyleSheet("QPushButton{background-color: rgb(20, 62, 134);color:rgb(255, 255, 255);}"); //userBtn->setStyleSheet("QPushButton{color:rgb(255, 255, 255);}""QPushButton:hover{background-color: rgb(20, 62, 134);border:none;color:rgb(255, 255, 255);}"); homeWidget = new HomeWidget(this); userWidget = new UserWidget(this); + searchWidget = new SearchResultWidget(this); + userWidget->setVisible(false); + searchWidget->setVisible(false); setLayout(verLayout); verLayout->addLayout(horLayout); verLayout->addWidget(homeWidget); verLayout->addWidget(userWidget); + verLayout->addWidget(searchWidget); horLayout->addWidget(homeBtn); horLayout->addWidget(userBtn); @@ -36,30 +40,68 @@ MainWidget::MainWidget(QWidget *parent) : connect(homeBtn, &QPushButton::clicked, this, &MainWidget::switchToHome); connect(userBtn, &QPushButton::clicked, this, &MainWidget::switchToUser); + connect(searchBtn, &QPushButton::clicked, this, &MainWidget::actSearch); + connect(searchWidget->getReturnBtn(), &QPushButton::clicked, this, &MainWidget::returnSearch); } void MainWidget::switchToHome() { - if (!atHome) + if (index != 0) { //homeBtn->setStyleSheet("QPushButton{background-color: rgb(20, 62, 134);color:rgb(255, 255, 255);}"); //userBtn->setStyleSheet("QPushButton{color:rgb(255, 255, 255);}""QPushButton:hover{background-color: rgb(20, 62, 134);border:none;color:rgb(255, 255, 255);}"); homeWidget->setVisible(true); userWidget->setVisible(false); - atHome = true; + searchWidget->setVisible(false); + searchBar->clear(); + index = 0; } } void MainWidget::switchToUser() { - if (atHome) + if (index != 1) { //homeBtn->setStyleSheet("QPushButton{color:rgb(255, 255, 255);}""QPushButton:hover{background-color: rgb(20, 62, 134);border:none;color:rgb(255, 255, 255);}"); //userBtn->setStyleSheet("QPushButton{background-color: rgb(20, 62, 134);color:rgb(255, 255, 255);}"); homeWidget->setVisible(false); userWidget->setVisible(true); - atHome = false; + searchWidget->setVisible(false); + searchBar->clear(); + index = 1; + } +} + +void MainWidget::actSearch() +{ + QString text = searchBar->text(); + + if (text != "") + { + homeWidget->setVisible(false); + userWidget->setVisible(false); + searchWidget->setVisible(true); + index = 2; + + searchWidget->sendInput(text); + searchWidget->showResult(); + //设置按钮内容 + + disconnect(searchWidget->getReturnBtn(), 0, 0, 0); + connect(searchWidget->getReturnBtn(), &QPushButton::clicked, this, &MainWidget::returnSearch); } + +} + +void MainWidget::returnSearch() +{ + //homeBtn->setStyleSheet("QPushButton{background-color: rgb(20, 62, 134);color:rgb(255, 255, 255);}"); + //userBtn->setStyleSheet("QPushButton{color:rgb(255, 255, 255);}""QPushButton:hover{background-color: rgb(20, 62, 134);border:none;color:rgb(255, 255, 255);}"); + homeWidget->setVisible(true); + userWidget->setVisible(false); + searchWidget->setVisible(false); + searchBar->clear(); + index = 0; } MainWidget::~MainWidget() diff --git a/src/ChangShaTour/mainwidget.h b/src/ChangShaTour/mainwidget.h index 2fefddf..bdf7aa1 100644 --- a/src/ChangShaTour/mainwidget.h +++ b/src/ChangShaTour/mainwidget.h @@ -1,4 +1,4 @@ -#ifndef MAINWIDGET_H +#ifndef MAINWIDGET_H #define MAINWIDGET_H #include @@ -6,8 +6,14 @@ #include #include #include +#include #include "homewidget.h" #include "userwidget.h" +#include "searchresultwidget.h" + +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif namespace Ui { class MainWidget; @@ -24,7 +30,7 @@ public: private: Ui::MainWidget *ui; - bool atHome; + int index; QVBoxLayout *verLayout; @@ -36,10 +42,13 @@ private: HomeWidget *homeWidget; UserWidget *userWidget; + SearchResultWidget *searchWidget; public slots: void switchToHome(); void switchToUser(); + void actSearch(); + void returnSearch(); }; #endif // MAINWIDGET_H diff --git a/src/ChangShaTour/mainwindow.cpp b/src/ChangShaTour/mainwindow.cpp index f8aea30..8f43eb2 100644 --- a/src/ChangShaTour/mainwindow.cpp +++ b/src/ChangShaTour/mainwindow.cpp @@ -1,4 +1,4 @@ -#include "mainwindow.h" +#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) @@ -9,19 +9,74 @@ MainWindow::MainWindow(QWidget *parent) resize(400,300); loginWidget = new LoginWidget(); - mainWidget = new MainWidget(); + setWindowTitle("登录"); this->setCentralWidget(loginWidget); - - connect(loginWidget->GetLoginButton(), &QPushButton::clicked, this, &MainWindow::switchToMain); + connect(loginWidget->getLoginButton(), &QPushButton::clicked, this, &MainWindow::switchToMain); + connect(loginWidget->getRegisterButton(), &QPushButton::clicked, this, &MainWindow::switchToRegister); } + void MainWindow::switchToMain() { - resize(1340, 720); + QString accountLogin=loginWidget->getAccount(); + QString passwordLogin=loginWidget->getPassword(); + //qDebug()<loginVerify(accountLogin,passwordLogin)) + { + + resize(1330, 720); + setMaximumSize(QSize(1330,720)); + // showMaximized(); + loginWidget->deleteLater(); + mainWidget = new MainWidget(); + setWindowTitle("长沙游"); + setCentralWidget(mainWidget); + + } + else + { + QMessageBox::warning(this,"警告","用户名或密码错误!",QMessageBox::Yes); + + return ; + } + +} +void MainWindow::switchToRegister() +{ loginWidget->deleteLater(); - setWindowTitle("Tour in Changsha"); - setCentralWidget(mainWidget); + registerWidget = new RegisterWidget(); + connect(registerWidget->getConfirmButton(), &QPushButton::clicked, this, &MainWindow::switchToLogin); + setWindowTitle("注册"); + setCentralWidget(registerWidget); +} + +void MainWindow::switchToLogin() +{ + QString emailAddress = registerWidget->getEmailAddress(); + QString password = registerWidget->getPassword(); + QString confirmPassword = registerWidget->getConfirmPassword(); + + RegisterManager * registerManager = new RegisterManager(); + if(registerManager->registerVerify(emailAddress, password, confirmPassword)) + { + QMessageBox::information(this, "提示", "注册成功!"); + registerWidget->deleteLater(); + loginWidget = new LoginWidget(); + connect(loginWidget->getLoginButton(), &QPushButton::clicked, this, &MainWindow::switchToMain); + connect(loginWidget->getRegisterButton(), &QPushButton::clicked, this, &MainWindow::switchToRegister); + setWindowTitle("登陆"); + setCentralWidget(loginWidget); + } } MainWindow::~MainWindow() diff --git a/src/ChangShaTour/mainwindow.h b/src/ChangShaTour/mainwindow.h index aec6b05..f37ea1a 100644 --- a/src/ChangShaTour/mainwindow.h +++ b/src/ChangShaTour/mainwindow.h @@ -1,14 +1,21 @@ -#ifndef MAINWINDOW_H +#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include "loginwidget.h" #include "mainwidget.h" +#include "loginmanager.h" +#include "registerwidget.h" +#include "registermanager.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + class MainWindow : public QMainWindow { Q_OBJECT @@ -22,9 +29,12 @@ private: LoginWidget *loginWidget; MainWidget *mainWidget; + RegisterWidget *registerWidget; + public slots: -// void switchToLogin(); void switchToMain(); + void switchToRegister(); + void switchToLogin(); }; #endif // MAINWINDOW_H diff --git a/src/ChangShaTour/planwidget.cpp b/src/ChangShaTour/planwidget.cpp index 017437d..424788c 100644 --- a/src/ChangShaTour/planwidget.cpp +++ b/src/ChangShaTour/planwidget.cpp @@ -1,4 +1,4 @@ -#include "planwidget.h" +#include "planwidget.h" #include "ui_planwidget.h" PlanWidget::PlanWidget(QWidget *parent) : diff --git a/src/ChangShaTour/planwidget.h b/src/ChangShaTour/planwidget.h index d77d7db..87b2f2e 100644 --- a/src/ChangShaTour/planwidget.h +++ b/src/ChangShaTour/planwidget.h @@ -1,4 +1,4 @@ -#ifndef PLANWIDGET_H +#ifndef PLANWIDGET_H #define PLANWIDGET_H #include @@ -11,6 +11,10 @@ #include "customizewidget.h" #include "confirmwidget.h" +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + namespace Ui { class PlanWidget; } diff --git a/src/ChangShaTour/preferencewidget.cpp b/src/ChangShaTour/preferencewidget.cpp index 6d5a948..1e2505f 100644 --- a/src/ChangShaTour/preferencewidget.cpp +++ b/src/ChangShaTour/preferencewidget.cpp @@ -1,4 +1,4 @@ -#include "preferencewidget.h" +#include "preferencewidget.h" #include "ui_preferencewidget.h" PreferenceWidget::PreferenceWidget(QWidget *parent) : @@ -26,7 +26,7 @@ PreferenceWidget::PreferenceWidget(QWidget *parent) : customLine = new QTextEdit("偏重人文风俗"); foodLine = new QTextEdit("偏重特色美食"); nightLine = new QTextEdit("night life"); - animeLine = new QTextEdit("anime"); + animeLine = new QTextEdit("偏重二次元"); loveLine = new QTextEdit("偏重恋人出游"); landscapeLine->setReadOnly(true); diff --git a/src/ChangShaTour/preferencewidget.h b/src/ChangShaTour/preferencewidget.h index c81053b..93ca8a4 100644 --- a/src/ChangShaTour/preferencewidget.h +++ b/src/ChangShaTour/preferencewidget.h @@ -1,4 +1,4 @@ -#ifndef PREFERENCEWIDGET_H +#ifndef PREFERENCEWIDGET_H #define PREFERENCEWIDGET_H #include @@ -7,6 +7,10 @@ #include #include +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + namespace Ui { class PreferenceWidget; } diff --git a/src/ChangShaTour/recommendwidget.cpp b/src/ChangShaTour/recommendwidget.cpp index 35b3683..14bb75f 100644 --- a/src/ChangShaTour/recommendwidget.cpp +++ b/src/ChangShaTour/recommendwidget.cpp @@ -1,4 +1,4 @@ -#include "recommendwidget.h" +#include "recommendwidget.h" #include "ui_recommendwidget.h" RecommendWidget::RecommendWidget(QWidget *parent) : @@ -8,10 +8,12 @@ RecommendWidget::RecommendWidget(QWidget *parent) : ui->setupUi(this); row = 8; - column = 4; + column = 3; + history=new AddHistory(); web = new WebWidget(); connector = new DatabaseConnector(); - db = connector->connectToDatabase(); + QString database="meituan"; + connector->connectToDatabase(database); QSqlQuery query(db); verLayout = new QVBoxLayout(); @@ -27,64 +29,32 @@ RecommendWidget::RecommendWidget(QWidget *parent) : refreshBtn = new QPushButton("刷新"); btnList = (QToolButton **)malloc(sizeof(QToolButton *) * row * column); - //读取数据库,获取按钮信息,初始化各List - - query.exec("select * from meishi limit 32"); - int i=0; - while(query.next()==true&&i<(row * column)) - { - i++; - QVariant id = query.value("id"); - - QVariant detail = query.value("detail"); - - QVariant frontimg = query.value("frontimg"); - - QVariant title = query.value("title"); - QVariant avgscore = query.value("avgscore"); - QVariant comments = query.value("comments"); - QVariant address = query.value("address"); - QVariant avgprice = query.value("avgprice"); - - QString name = title.value(); - QString score = QString::number(avgscore.value()); - QString commentNum = QString::number(comments.value()); - QString addr = address.value(); - QString price = QString::number(avgprice.value()); - QString text = name + "\n" + score + "分 " + commentNum + "条评论\n" + addr + "\n" + "人均" + price; - - idList.append(id.value()); - urlList.append(detail.value()); - imgList.append(frontimg.value()); - textList.append(text); - } - - /*for (int i = 0; i < row; i++) + //初始化按钮 + for (int i = 0; i < row; i++) { for (int j = 0; j downloadFileFromUrl(imgList[index], imgPath); - btnList[index] = setBtn(btnList[index], imgPath, textList[index]); - connect(btnList[index], &QToolButton::clicked, this, [=](){web->view->load(QUrl((const QString)urlList[index])); scroll->setVisible(false); web->setVisible(true);}); } } + //读取数据库,获取按钮信息,初始化各List + query.prepare("select * from food limit :limit"); + query.bindValue(":limit", row * column); + queryDatabase(query); + //设置按钮界面 + setBtns(); + //安排布局 setLayout(verLayout); + verLayout->addLayout(funcLine); verLayout->addWidget(scroll); verLayout->addWidget(web); web->setVisible(false); subWidget->setLayout(subVerLayout); - subVerLayout->addLayout(funcLine); for (int i = 0; i < row; i++) { lineList[i] = new QHBoxLayout(); @@ -101,28 +71,123 @@ RecommendWidget::RecommendWidget(QWidget *parent) : } } - //必选要在setWidget方法调用之前把subWidget中的layout设置好,否则显示不出来 + query.finish(); + connector->closeDatabase(); + + //必须要在setWidget方法调用之前把subWidget中的layout设置好,否则显示不出来 scroll->setWidget(subWidget); - connect(web->rtn, &QPushButton::clicked, this, &RecommendWidget::webReturn);*/ + connect(web->getReturnBtn(), &QPushButton::clicked, this, &RecommendWidget::webReturn); + connect(refreshBtn, &QPushButton::clicked, this, &RecommendWidget::refresh); } QToolButton *RecommendWidget::setBtn(QToolButton *btn, const QString iconPath, const QString text) { btn->setIcon(QIcon(iconPath)); btn->setText(text); - btn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + btn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); btn->setIconSize(QSize(100,200)); - btn->setFixedSize(500,200); + btn->setFixedSize(400,250); return btn; } +void RecommendWidget::queryDatabase(QSqlQuery query) +{ + query.exec(); + int i=0; + while(query.next()==true&&i<(row * column)) + { + i++; + QVariant id = query.value("id"); + + QVariant detail = query.value("detail"); + + QVariant frontimg = query.value("frontimg"); + + QVariant title = query.value("title"); + QVariant avgscore = query.value("avgscore"); + QVariant comments = query.value("comments"); + QVariant address = query.value("address"); + QVariant avgprice = query.value("avgprice"); + + QString name = title.value(); + QString score = QString::number(avgscore.value()); + QString commentNum = QString::number(comments.value()); + QString addr = address.value(); + QString price = QString::number(avgprice.value()); + QString text = name + "\n" + score + "分 " + commentNum + "条评论\n" + addr + "\n" + "人均" + price + "元"; + idList.append(id.value()); + urlList.append(detail.value()); + imgList.append(frontimg.value()); + textList.append(text); + } +} + +void RecommendWidget::setBtns() +{ + for (int i = 0; i < row; i++) + { + for (int j = 0; j downloadFileFromUrl(imgList[index], imgPath); + btnList[index] = setBtn(btnList[index], imgPath, textList[index]); + disconnect(btnList[index], 0, 0, 0); + connect(btnList[index], &QToolButton::clicked, this, [=](){web->loadPage(urlList[index]); history->add(urlList[index]); scroll->setVisible(false); web->setVisible(true); refreshBtn->setVisible(false);}); + } + } +} +//点击详情的槽函数(未用) +void RecommendWidget::loadToHistory(int index) +{ + history->add(urlList[index]); + web->loadPage(urlList[index]); + scroll->setVisible(false); + web->setVisible(true); + refreshBtn->setVisible(false); + +} void RecommendWidget::webReturn() { scroll->setVisible(true); web->setVisible(false); + refreshBtn->setVisible(true); +} + +void RecommendWidget::refresh() +{ + rollTop(); + + idList.clear(); + urlList.clear(); + imgList.clear(); + textList.clear(); + + connector->connectToDatabase("meituan"); + QSqlQuery query(db); +// query.exec("select * from csmeishi limit 2"); + query.prepare("select * from food limit 36, :limit"); + query.bindValue(":limit", row * column); + queryDatabase(query); + + setBtns(); + query.finish(); + connector->closeDatabase(); + qDebug()<<"refreshed"; +} + +void RecommendWidget::rollTop() +{ + QScrollBar *scrollBar = scroll->verticalScrollBar(); + scrollBar->setValue(scrollBar->minimum()); } RecommendWidget::~RecommendWidget() diff --git a/src/ChangShaTour/recommendwidget.h b/src/ChangShaTour/recommendwidget.h index 62b8a18..8e187d2 100644 --- a/src/ChangShaTour/recommendwidget.h +++ b/src/ChangShaTour/recommendwidget.h @@ -1,4 +1,4 @@ -#ifndef RECOMMENDWIDGET_H +#ifndef RECOMMENDWIDGET_H #define RECOMMENDWIDGET_H #include @@ -11,9 +11,17 @@ #include #include #include +#include +#include #include "webwidget.h" #include "databaseconnector.h" #include "imgdownloader.h" +#include "addhistory.h" + +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + namespace Ui { class RecommendWidget; @@ -28,10 +36,12 @@ public: ~RecommendWidget(); QToolButton *setBtn(QToolButton *btn, const QString iconPath, const QString text); + void queryDatabase(QSqlQuery query); + void setBtns(); + void refresh(); - void connectWeb(); void webReturn(); - void setBtnIndex(); + void rollTop(); private: Ui::RecommendWidget *ui; @@ -44,7 +54,6 @@ private: QStringList idList; WebWidget *web; DatabaseConnector * connector; - QSqlDatabase db; QString currentUrl; QVBoxLayout *verLayout; @@ -57,9 +66,11 @@ private: QPushButton *refreshBtn; QToolButton **btnList; + AddHistory * history; +private slots: + void loadToHistory(int index); signals: - void btnSignal(QToolButton *btn); }; #endif // RECOMMENDWIDGET_H diff --git a/src/ChangShaTour/registermanager.cpp b/src/ChangShaTour/registermanager.cpp new file mode 100644 index 0000000..a8a9b79 --- /dev/null +++ b/src/ChangShaTour/registermanager.cpp @@ -0,0 +1,75 @@ +#include "registermanager.h" + +RegisterManager::RegisterManager() +{ + +} + +bool RegisterManager::registerVerify(QString emailAddress, QString password, QString confirmPassword) +{ + if(emailAddress == "") + { + QMessageBox::warning(NULL, "警告", "请输入邮箱地址!", QMessageBox::Yes); + return false; + } + if(password == "") + { + QMessageBox::warning(NULL, "警告", "请输入密码!", QMessageBox::Yes); + return false; + } + if(confirmPassword == "") + { + QMessageBox::warning(NULL, "警告", "请确认密码!", QMessageBox::Yes); + return false; + } + + connect = new DatabaseConnector(); + QString database="user"; + connect->connectToDatabase(database); + + QSqlQuery query(db); + query.prepare("select password from account where email=?"); + query.addBindValue(emailAddress); + query.exec(); + + if(query.next()) + { + QMessageBox::warning(NULL, "警告", "该邮箱已被注册,请更换邮箱后重试!", QMessageBox::Yes); + query.finish(); + connect->closeDatabase(); + return false; + } + + if(password.length() < 6) + { + QMessageBox::warning(NULL, "警告", "密码过短,请输入长度为6~12位的密码!", QMessageBox::Yes); + query.finish(); + connect->closeDatabase(); + return false; + } + if(password.length() > 12) + { + QMessageBox::warning(NULL, "警告", "密码过长,请输入长度为6~12位的密码!", QMessageBox::Yes); + query.finish(); + connect->closeDatabase(); + return false; + } + if(QString::compare(password, confirmPassword, Qt::CaseSensitive)) + { + QMessageBox::warning(NULL, "警告", "确认密码错误,请检查无误后重试!", QMessageBox::Yes); + query.finish(); + connect->closeDatabase(); + return false; + } + + + query.prepare("INSERT INTO account(email, password) " + "VALUES (:email, :password)"); + query.bindValue(":email", emailAddress); + query.bindValue(":password", password); + query.exec(); + + query.finish(); + connect->closeDatabase(); + return true; +} diff --git a/src/ChangShaTour/registermanager.h b/src/ChangShaTour/registermanager.h new file mode 100644 index 0000000..2638888 --- /dev/null +++ b/src/ChangShaTour/registermanager.h @@ -0,0 +1,24 @@ +#ifndef REGISTERMANAGER_H +#define REGISTERMANAGER_H + +#include "databaseconnector.h" +#include +#include +#include + +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + +class RegisterManager +{ +public: + RegisterManager(); + bool registerVerify(QString emailAddress, QString password, QString confirmPassword); + +private: + DatabaseConnector * connect; + +}; + +#endif // REGISTERMANAGER_H diff --git a/src/ChangShaTour/registerwidget.cpp b/src/ChangShaTour/registerwidget.cpp new file mode 100644 index 0000000..3af2fb5 --- /dev/null +++ b/src/ChangShaTour/registerwidget.cpp @@ -0,0 +1,67 @@ +#include "registerwidget.h" +#include "ui_registerwidget.h" + +RegisterWidget::RegisterWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::RegisterWidget) +{ + ui->setupUi(this); + + vertiacalLayout = new QVBoxLayout(); + emailAddressHorizontalLayout = new QHBoxLayout(); + passwordHorizontalLayout = new QHBoxLayout(); + confirmPasswordHorizontalLayout = new QHBoxLayout(); + confirmHorizontalLayout = new QHBoxLayout(); + + emailAddressLabel = new QLabel("邮箱地址"); + emailAddressLineEdit = new QLineEdit(); + emailAddressHorizontalLayout->addWidget(emailAddressLabel); + emailAddressHorizontalLayout->addWidget(emailAddressLineEdit); + + passwordLabel = new QLabel("密码"); + passwordLineEdit = new QLineEdit(); + passwordLineEdit->setEchoMode(QLineEdit::Password); + passwordHorizontalLayout->addWidget(passwordLabel); + passwordHorizontalLayout->addWidget(passwordLineEdit); + + confirmPasswordLabel = new QLabel("确认密码"); + confirmPasswordLineEdit = new QLineEdit(); + confirmPasswordLineEdit->setEchoMode(QLineEdit::Password); + confirmPasswordHorizontalLayout->addWidget(confirmPasswordLabel); + confirmPasswordHorizontalLayout->addWidget(confirmPasswordLineEdit); + + confirmButton = new QPushButton("确认"); + confirmHorizontalLayout->addWidget(confirmButton); + + vertiacalLayout->addLayout(emailAddressHorizontalLayout); + vertiacalLayout->addLayout(passwordHorizontalLayout); + vertiacalLayout->addLayout(confirmPasswordHorizontalLayout); + vertiacalLayout->addLayout(confirmHorizontalLayout); + + this->setLayout(vertiacalLayout); +} + +QPushButton * RegisterWidget::getConfirmButton() +{ + return confirmButton; +} + +QString RegisterWidget::getEmailAddress() +{ + return emailAddressLineEdit->text(); +} + +QString RegisterWidget::getPassword() +{ + return passwordLineEdit->text(); +} + +QString RegisterWidget::getConfirmPassword() +{ + return confirmPasswordLineEdit->text(); +} + +RegisterWidget::~RegisterWidget() +{ + delete ui; +} diff --git a/src/ChangShaTour/registerwidget.h b/src/ChangShaTour/registerwidget.h new file mode 100644 index 0000000..419a71b --- /dev/null +++ b/src/ChangShaTour/registerwidget.h @@ -0,0 +1,53 @@ +#ifndef REGISTERWIDGET_H +#define REGISTERWIDGET_H + +#include +#include +#include +#include +#include +#include +#include "loginwidget.h" + +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + +namespace Ui { +class RegisterWidget; +} + +class RegisterWidget : public QWidget +{ + Q_OBJECT + +public: + explicit RegisterWidget(QWidget *parent = nullptr); + ~RegisterWidget(); + + QPushButton * getConfirmButton(); + QString getEmailAddress(); + QString getPassword(); + QString getConfirmPassword(); + +private: + Ui::RegisterWidget *ui; + + QVBoxLayout * vertiacalLayout; + QHBoxLayout * emailAddressHorizontalLayout; + QHBoxLayout * passwordHorizontalLayout; + QHBoxLayout * confirmPasswordHorizontalLayout; + QHBoxLayout * confirmHorizontalLayout; + + QLabel * emailAddressLabel; + QLabel * passwordLabel; + QLabel * confirmPasswordLabel; + + QLineEdit * emailAddressLineEdit; + QLineEdit * passwordLineEdit; + QLineEdit * confirmPasswordLineEdit; + + QPushButton * confirmButton; +}; + +#endif // REGISTERWIDGET_H diff --git a/src/ChangShaTour/registerwidget.ui b/src/ChangShaTour/registerwidget.ui new file mode 100644 index 0000000..96058f2 --- /dev/null +++ b/src/ChangShaTour/registerwidget.ui @@ -0,0 +1,21 @@ + + + + + RegisterWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + diff --git a/src/ChangShaTour/routechoicewidget.cpp b/src/ChangShaTour/routechoicewidget.cpp index 19f4f27..a357180 100644 --- a/src/ChangShaTour/routechoicewidget.cpp +++ b/src/ChangShaTour/routechoicewidget.cpp @@ -1,4 +1,4 @@ -#include "routechoicewidget.h" +#include "routechoicewidget.h" #include "ui_routechoicewidget.h" RouteChoiceWidget::RouteChoiceWidget(QWidget *parent) : diff --git a/src/ChangShaTour/routechoicewidget.h b/src/ChangShaTour/routechoicewidget.h index 1832cab..f85f172 100644 --- a/src/ChangShaTour/routechoicewidget.h +++ b/src/ChangShaTour/routechoicewidget.h @@ -1,8 +1,12 @@ -#ifndef ROUTECHOICEWIDGET_H +#ifndef ROUTECHOICEWIDGET_H #define ROUTECHOICEWIDGET_H #include +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + namespace Ui { class RouteChoiceWidget; } diff --git a/src/ChangShaTour/searchresultwidget.cpp b/src/ChangShaTour/searchresultwidget.cpp new file mode 100644 index 0000000..6d0f735 --- /dev/null +++ b/src/ChangShaTour/searchresultwidget.cpp @@ -0,0 +1,261 @@ +#include "searchresultwidget.h" + +SearchResultWidget::SearchResultWidget(QWidget *parent) : QWidget(parent) +{ + showLimit = 15; + history = new AddHistory(); + + mainLayout = new QVBoxLayout(); + + subWidget = new QWidget(); + web = new WebWidget(); + nullWidget = new QLabel("抱歉,未找到您要的结果。"); + + subLayout = new QVBoxLayout(); + + rtn = new QPushButton("返回"); + scroll = new QScrollArea(); + + scrollWidget = new QWidget(); + scrollLayout = new QVBoxLayout(); + + btnList = (QToolButton **)malloc(sizeof(QToolButton *) * showLimit); + for (int i = 0; i setLayout(mainLayout); + + mainLayout->addWidget(subWidget); + mainLayout->addWidget(web); + mainLayout->addWidget(nullWidget); + web->setVisible(false); + nullWidget->setVisible(false); + + subWidget->setLayout(subLayout); + + subLayout->addWidget(rtn); + subLayout->addWidget(scroll); + + //设置滚动界面布局 + scrollWidget->setLayout(scrollLayout); + for (int i = 0; i < showLimit; i++) + { + scrollLayout->addWidget(btnList[i]); + } + scrollLayout->addLayout(switchLine); + switchLine->addWidget(up); + switchLine->addWidget(down); + + scroll->setWidget(scrollWidget); + + connect(web->getReturnBtn(), &QPushButton::clicked, this, &SearchResultWidget::returnWeb); + connect(up, &QPushButton::clicked, this, &SearchResultWidget::pageUp); + connect(down, &QPushButton::clicked, this, &SearchResultWidget::pageDown); + +} + +QPushButton *SearchResultWidget::getReturnBtn() +{ + return rtn; +} + +void SearchResultWidget::sendInput(QString input) +{ + this->segment = input; + qDebug() << "segment:" <connectToDatabase("meituan"); + QSqlQuery query(db); + + query.prepare("select count(*) as num from food where title like :segment"); + query.bindValue(":segment", "%" + segment + "%"); + query.exec(); + query.next(); + qDebug() << "totalNum:" << query.value("num") ; + totalNum = query.value("num").value(); + + query.finish(); + connector->closeDatabase(); + + pageNum = (totalNum + showLimit - 1)/showLimit; + qDebug() << "pageNum" << pageNum; + +} + +void SearchResultWidget::queryDatabase(QSqlQuery query) +{ + query.exec(); + int i=0; + while(query.next()==true && i < showLimit) + { + i++; + QVariant id = query.value("id"); + + QVariant detail = query.value("detail"); + + QVariant frontimg = query.value("frontimg"); + + QVariant title = query.value("title"); + QVariant avgscore = query.value("avgscore"); + QVariant comments = query.value("comments"); + QVariant address = query.value("address"); + QVariant avgprice = query.value("avgprice"); + + QString name = title.value(); + QString score = QString::number(avgscore.value()); + QString commentNum = QString::number(comments.value()); + QString addr = address.value(); + QString price = QString::number(avgprice.value()); + QString text = name + "\n" + score + "分 " + commentNum + "条评论\n" + addr + "\n" + "人均" + price + "元"; + idList.append(id.value()); + urlList.append(detail.value()); + imgList.append(frontimg.value()); + textList.append(text); + } + currentNum = idList.length(); + qDebug() << "currentNum:" << currentNum; +} + +QToolButton *SearchResultWidget::setBtn(QToolButton *btn, const QString iconPath, const QString text) +{ + if(iconPath != "") + btn->setIcon(QIcon(iconPath)); + btn->setText(text); + btn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + btn->setIconSize(QSize(100,200)); + btn->setFixedSize(1230,200); + + return btn; +} + +void SearchResultWidget::setBtns() +{ + int i = 0; + for (i; i < currentNum; i++) + { + int index = i; + //下载图片到本地 + QString imgPath = "D:/Study/SE/project/images/" + idList[index] + ".png"; + imgDownloader *download = new imgDownloader(); + download->downloadFileFromUrl(imgList[index], imgPath); + btnList[index] = setBtn(btnList[index], imgPath, textList[index]); +// btnList[index]->setVisible(true); + disconnect(btnList[index], 0, 0, 0); + connect(btnList[index], &QToolButton::clicked, this, [=](){web->loadPage(urlList[index]); history->add(urlList[index]); subWidget->setVisible(false); web->setVisible(true); nullWidget->setVisible(false);}); + } + for (i; i < showLimit; i++) + { + int index = i; + btnList[index] = setBtn(btnList[index], "D:/Study/SE/project/images/transparent.png", ""); +// btnList[index]->setVisible(false); + disconnect(btnList[index], 0, 0, 0); + } +} + +void SearchResultWidget::querySet() +{ + rollTop(); + + //重置存储查询信息的列表 + idList.clear(); + urlList.clear(); + imgList.clear(); + textList.clear(); + + //查询数据 + connector->connectToDatabase("meituan"); + QSqlQuery query(db); + + query.prepare("select * from food where title like :segment limit :offset , :showLimit"); + query.bindValue(":segment", "%" + segment + "%"); + query.bindValue(":offset", (currentPage - 1) * showLimit); + qDebug() << "offset:" << (currentPage - 1) * showLimit; + query.bindValue(":showLimit", showLimit); + qDebug() << "showLimit:" << showLimit; + queryDatabase(query); + qDebug() << "query success"; + + query.finish(); + connector->closeDatabase(); + + //设置按钮 + setBtns(); + qDebug() << "set buttons success"; +} + +void SearchResultWidget::showResult() +{ + getTotalNum(); + currentPage = 1; + if (totalNum) + { + querySet(); + subWidget->setVisible(true); + nullWidget->setVisible(false); + } + else + { + subWidget->setVisible(false); + nullWidget->setVisible(true); + } + web->setVisible(false); + +} + +void SearchResultWidget::returnWeb() +{ + subWidget->setVisible(true); + web->setVisible(false); + nullWidget->setVisible(false); +} + +void SearchResultWidget::pageUp() +{ + currentPage--; + if (currentPage < 1) + { + currentPage = 1; + } + else + { + rollTop(); + querySet(); + } +} + +void SearchResultWidget::pageDown() +{ + currentPage++; + if (currentPage > pageNum) + { + currentPage = pageNum; + } + else + { + rollTop(); + querySet(); + } +} + +void SearchResultWidget::rollTop() +{ + QScrollBar *scrollBar = scroll->verticalScrollBar(); + scrollBar->setValue(scrollBar->minimum()); +} + + diff --git a/src/ChangShaTour/searchresultwidget.h b/src/ChangShaTour/searchresultwidget.h new file mode 100644 index 0000000..6104f9a --- /dev/null +++ b/src/ChangShaTour/searchresultwidget.h @@ -0,0 +1,81 @@ +#ifndef SEARCHRESULTWIDGET_H +#define SEARCHRESULTWIDGET_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "addhistory.h" +#include "databaseconnector.h" +#include "webwidget.h" +#include "imgdownloader.h" + + + + +class SearchResultWidget : public QWidget +{ + Q_OBJECT +public: + explicit SearchResultWidget(QWidget *parent = nullptr); + + void sendInput(QString input); + void queryDatabase(QSqlQuery query); + void getTotalNum(); + void showResult(); + QPushButton *getReturnBtn(); + QToolButton *setBtn(QToolButton *btn, const QString iconPath, const QString text); + void querySet(); + void setBtns(); + void pageUp(); + void pageDown(); + void returnWeb(); + void rollTop(); + +signals: + +private: + QString segment; + + QStringList urlList; + QStringList imgList; + QStringList textList; + QStringList idList; + DatabaseConnector * connector; + AddHistory *history; + + int totalNum; + int pageNum; + int showLimit; + int currentPage; + int currentNum; + + QVBoxLayout *mainLayout; + + QWidget *subWidget; + WebWidget *web; + QLabel *nullWidget; + + QVBoxLayout *subLayout; + QPushButton *rtn; + QScrollArea *scroll; + + QWidget *scrollWidget; + QVBoxLayout *scrollLayout; + + QToolButton **btnList; + + QHBoxLayout *switchLine; + QPushButton *up; + QPushButton *down; + +}; + +#endif // SEARCHRESULTWIDGET_H diff --git a/src/ChangShaTour/searchwidget.cpp b/src/ChangShaTour/searchwidget.cpp new file mode 100644 index 0000000..2c639e4 --- /dev/null +++ b/src/ChangShaTour/searchwidget.cpp @@ -0,0 +1,14 @@ +#include "searchwidget.h" +#include "ui_searchwidget.h" + +SearchWidget::SearchWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::SearchWidget) +{ + ui->setupUi(this); +} + +SearchWidget::~SearchWidget() +{ + delete ui; +} diff --git a/src/ChangShaTour/searchwidget.h b/src/ChangShaTour/searchwidget.h new file mode 100644 index 0000000..d2119ef --- /dev/null +++ b/src/ChangShaTour/searchwidget.h @@ -0,0 +1,22 @@ +#ifndef SEARCHWIDGET_H +#define SEARCHWIDGET_H + +#include + +namespace Ui { +class SearchWidget; +} + +class SearchWidget : public QWidget +{ + Q_OBJECT + +public: + explicit SearchWidget(QWidget *parent = nullptr); + ~SearchWidget(); + +private: + Ui::SearchWidget *ui; +}; + +#endif // SEARCHWIDGET_H diff --git a/src/ChangShaTour/searchwidget.ui b/src/ChangShaTour/searchwidget.ui new file mode 100644 index 0000000..b116dd1 --- /dev/null +++ b/src/ChangShaTour/searchwidget.ui @@ -0,0 +1,21 @@ + + + + + SearchWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + diff --git a/src/ChangShaTour/showplaceinfowidget.cpp b/src/ChangShaTour/showplaceinfowidget.cpp index 35e07ce..a8b3941 100644 --- a/src/ChangShaTour/showplaceinfowidget.cpp +++ b/src/ChangShaTour/showplaceinfowidget.cpp @@ -1,4 +1,4 @@ -#include "showplaceinfowidget.h" +#include "showplaceinfowidget.h" #include "ui_showplaceinfowidget.h" ShowPlaceInfoWidget::ShowPlaceInfoWidget(QWidget *parent) : diff --git a/src/ChangShaTour/showplaceinfowidget.h b/src/ChangShaTour/showplaceinfowidget.h index 9af420a..6804b27 100644 --- a/src/ChangShaTour/showplaceinfowidget.h +++ b/src/ChangShaTour/showplaceinfowidget.h @@ -1,8 +1,12 @@ -#ifndef SHOWPLACEINFOWIDGET_H +#ifndef SHOWPLACEINFOWIDGET_H #define SHOWPLACEINFOWIDGET_H #include +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + namespace Ui { class ShowPlaceInfoWidget; } diff --git a/src/ChangShaTour/showrouteinfowidget.cpp b/src/ChangShaTour/showrouteinfowidget.cpp index 785960d..53155e2 100644 --- a/src/ChangShaTour/showrouteinfowidget.cpp +++ b/src/ChangShaTour/showrouteinfowidget.cpp @@ -1,4 +1,4 @@ -#include "showrouteinfowidget.h" +#include "showrouteinfowidget.h" #include "ui_showrouteinfowidget.h" ShowRouteInfoWidget::ShowRouteInfoWidget(QWidget *parent) : diff --git a/src/ChangShaTour/showrouteinfowidget.h b/src/ChangShaTour/showrouteinfowidget.h index aebbf53..1caaf0c 100644 --- a/src/ChangShaTour/showrouteinfowidget.h +++ b/src/ChangShaTour/showrouteinfowidget.h @@ -1,8 +1,12 @@ -#ifndef SHOWROUTEINFOWIDGET_H +#ifndef SHOWROUTEINFOWIDGET_H #define SHOWROUTEINFOWIDGET_H #include +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + namespace Ui { class ShowRouteInfoWidget; } diff --git a/src/ChangShaTour/sortwidget.cpp b/src/ChangShaTour/sortwidget.cpp index 65687ee..9969ed2 100644 --- a/src/ChangShaTour/sortwidget.cpp +++ b/src/ChangShaTour/sortwidget.cpp @@ -1,22 +1,450 @@ -#include "sortwidget.h" +#include "sortwidget.h" #include "ui_sortwidget.h" -#include -#include - SortWidget::SortWidget(QWidget *parent) : QWidget(parent), ui(new Ui::SortWidget) { ui->setupUi(this); - QVBoxLayout *layout = new QVBoxLayout(); + signalMapper = new QSignalMapper(this); + subSignalMapper = new QSignalMapper(this); + verLayout = new QVBoxLayout(); + setLayout(verLayout); + foodChoices = new QWidget(); + hotelChoices = new QWidget(); + houseChoices = new QWidget(); + entertainmentChoices = new QWidget(); + serviceChoices = new QWidget(); + beautyChoices = new QWidget(); + weddingChoices = new QWidget(); + parentChildChoices = new QWidget(); + sportsChoices = new QWidget(); + funcWidget = new QWidget(); + scroll = new QScrollArea(); + subWidget = new QWidget(); + subVerLayout = new QVBoxLayout(); + web = new WebWidget(); + connector = new DatabaseConnector(); + pageWidget = new QWidget(); + pageHoriLayout = new QHBoxLayout(); + nextButton = new QPushButton("下页"); + backButton = new QPushButton("上页"); + pageHoriLayout->addWidget(backButton); + pageHoriLayout->addWidget(nextButton); + pageWidget->setLayout(pageHoriLayout); + + QString database="meituan"; + connector->connectToDatabase(database); + QSqlQuery query(db); + //读取数据库,获取按钮信息,初始化各List + queryDatabase(query, "select * from csmeishi limit " + QString::number(row, 10)); + size = (size < row? size: row); + + setScreenBtns(); + btnList = (QToolButton **)malloc(sizeof(QToolButton *) * size); + //初始化按钮 + for (int i = 0; i < size; i++) + btnList[i] = new QToolButton(); + //设置按钮界面 + setBtns(); + + verLayout->addWidget(funcWidget); + initAllSubScreenBtns(); + foodChoices->setVisible(true); + verLayout->addWidget(scroll); + verLayout->addWidget(web); + verLayout->addWidget(pageWidget); + web->setVisible(false); + + subWidget->setLayout(subVerLayout); + for (int i = 0; i < size; i++) + subVerLayout->addWidget(btnList[i]); + //必选要在setWidget方法调用之前把subWidget中的layout设置好,否则显示不出来 + scroll->setWidget(subWidget); + + query.finish(); + connector->closeDatabase(); - setLayout(layout); - layout->addWidget(new QLabel("SortWidget")); + setPageMaxNumber(screenStr); + setPageBtns(); + + connect(web->getReturnBtn(), &QPushButton::clicked, this, &SortWidget::webReturn); + connect(backButton, &QPushButton::clicked, this, &SortWidget::backPage); + connect(nextButton, &QPushButton::clicked, this, &SortWidget::nextPage); } SortWidget::~SortWidget() { delete ui; } + +QToolButton * SortWidget::setBtn(QToolButton *btn, const QString text) +{ + btn->setText(text); + btn->setToolButtonStyle(Qt::ToolButtonTextOnly); + + return btn; +} + +void SortWidget::queryDatabase(QSqlQuery query, QString statement) +{ + query.exec(statement); + idList.clear(); + urlList.clear(); + imgList.clear(); + textList.clear(); + size = 0; + while(query.next() == true && size < row) + { + size++; + QVariant id = query.value("id"); + + QVariant detail = query.value("detail"); + + QVariant frontimg = query.value("frontimg"); + + QVariant title = query.value("title"); + QVariant avgscore = query.value("avgscore"); + QVariant comments = query.value("comments"); + QVariant address = query.value("address"); + QVariant avgprice = query.value("avgprice"); + + QString name = title.value(); + QString score = QString::number(avgscore.value()); + QString commentNum = QString::number(comments.value()); + QString addr = address.value(); + QString price = QString::number(avgprice.value()); + QString text = name + " " + score + "分 " + commentNum + "条评论 " + addr + " " + "人均" + price + "元"; + idList.append(id.value()); + urlList.append(detail.value()); + imgList.append(frontimg.value()); + textList.append(text); + } +} + +void SortWidget::setBtns() +{ + for (int i = 0; i < size; i++) + { + int index = i; + btnList[index] = setBtn(btnList[index], textList[index]); + connect(btnList[index], &QToolButton::clicked, this, [=](){web->loadPage((const QString)urlList[index]); scroll->setVisible(false); funcWidget->setVisible(false); pageWidget->setVisible(false); InvisibleAllSubScreenBtns(); web->setVisible(true);}); + } +} + +void SortWidget::webReturn() +{ + scroll->setVisible(true); + web->setVisible(false); + funcWidget->setVisible(true); + pageWidget->setVisible(true); + ShowSubScreenBtn(); +} + +void SortWidget::setScreenBtns() +{ + QString str = "美食 酒店 民宿 休闲娱乐/KTV 生活服务 丽人/美发/医学美容 结婚/婚纱摄影/婚宴 亲子/儿童乐园/幼教 运动健身/健身中心"; + QStringList strList = str.split(" "); + QHBoxLayout * funcLine = new QHBoxLayout(); + int nColCnt = 0; + foreach(QString itor, strList) + { + QPushButton *pBtn = new QPushButton(this); + pBtn->setText(itor); + + connect(pBtn, SIGNAL(clicked()), signalMapper, SLOT(map())); + signalMapper->setMapping(pBtn, pBtn->text()); + + funcLine->addWidget(pBtn, nColCnt++, 0); + } + funcWidget->setLayout(funcLine); + connect(signalMapper, SIGNAL(mapped(QString)), this, SLOT(setSubScreenBtns(QString))); +} + +void SortWidget::initSubScreenBtns(QWidget * choices, QString str) +{ + QStringList strList = str.split(" "); + QGridLayout * gridLayout = new QGridLayout(); + int nRowCnt = 0; + int nColCnt = 0; + foreach(QString itor, strList) + { + QPushButton *pBtn = new QPushButton(this); + pBtn->setText(itor); + + connect(pBtn, SIGNAL(clicked()), subSignalMapper, SLOT(map())); + subSignalMapper->setMapping(pBtn, pBtn->text()); + + gridLayout->addWidget(pBtn, nRowCnt, nColCnt++); + + if (nColCnt >= 15) + { + nRowCnt++; + nColCnt = 0; + } + } + + connect(subSignalMapper, SIGNAL(mapped(QString)), this, SLOT(Screen(QString))); + choices->setLayout(gridLayout); +} + + +void SortWidget::initAllSubScreenBtns() +{ + const int size = 9; + QWidget * choices[size] = {foodChoices, hotelChoices, houseChoices, entertainmentChoices, serviceChoices, beautyChoices, weddingChoices, parentChildChoices, sportsChoices}; + QString str[size] = {"代金券 蛋糕甜点 火锅 自助餐 小吃快餐 日韩料理 西餐 聚餐宴请 烧烤烤肉 东北菜 川湘菜 江浙菜 香锅烤鱼 粤港菜 中式烧烤/烤串 西北菜 咖啡酒吧茶馆 云贵菜 东南亚菜 海鲜 素食 台湾/客家菜 创意菜汤/粥/炖菜 蒙餐 新疆菜 其他美食 京菜鲁菜", \ + "经济型 舒适/三星 高档/四星 豪华/五星",\ + "复式Loft 别墅",\ + "足疗按摩 洗浴/汗蒸 酒吧 密室逃脱 轰趴馆 茶馆 私人影院 DIY手工坊 采摘/农家乐 网吧网咖 游乐游艺 VR 桌面游戏 真人CS 棋牌室 其他玩乐 KTV",\ + "衣物/皮具洗护 家政 搬家运输 送水 充值缴费 服饰/鞋包养护 开锁换锁 居家维修 管道疏通 家电维修清洗 电脑维修 手机维修 证件照/肖像摄影 照片冲印/图文文印 商务服务/法律服务 文化传媒机构 成人用品/情趣用品",\ + "美发 美甲美睫 美容美体 医学美容 瑜伽舞蹈 瘦身纤体 韩式定妆 祛痘 纹身 化妆品 养发",\ + "婚纱摄影 旅拍 个性写真 婚宴 婚庆公司 婚纱礼服 西服定制 婚戒首饰 婚车租赁 司仪主持 彩妆造型 婚礼跟拍 婚礼小礼品 更多婚礼服务",\ + "婴儿游泳 其它亲子游乐 早教中心 少儿英语 智力开发 托班/幼儿园 幼儿教育 其他幼儿教育 儿童摄影 孕妇写真 上门拍 其他亲子摄影 月子会所 产后恢复 妇幼医院 孕产用品 开奶催乳 月嫂 亲子购物 宝宝派对 亲子服务",\ + "健身中心 武术场馆 游泳馆 羽毛球馆 溜冰场 射箭馆 篮球场 网球馆 台球馆 乒乓球 足球场 高尔夫场 保龄球馆 体育场馆 马术场 壁球馆 更多运动",\ + }; + for ( int i = 0; i < size; i++ ) + { + initSubScreenBtns(choices[i], str[i]); + verLayout->addWidget(choices[i]); + choices[i]->setVisible(false); + } +} + +void SortWidget::InvisibleAllSubScreenBtns() +{ + const int size = 9; + QWidget * choices[size] = {foodChoices, hotelChoices, houseChoices, entertainmentChoices, serviceChoices, beautyChoices, weddingChoices, parentChildChoices, sportsChoices}; + for ( int i = 0; i < size; i++ ) + choices[i]->setVisible(false); +} + +void SortWidget::ShowSubScreenBtn() +{ + if ( screenCode == "csmeishi" ) + foodChoices->setVisible(true); + else if ( screenCode == "csjiudian" ) + hotelChoices->setVisible(true); + else if ( screenCode == "csjiudian" ) + houseChoices->setVisible(true); + else if ( screenCode == "csjiudian" ) + entertainmentChoices->setVisible(true); + else if ( screenCode == "csjiudian" ) + serviceChoices->setVisible(true); + else if ( screenCode == "csjiudian" ) + beautyChoices->setVisible(true); + else if ( screenCode == "csjiudian" ) + weddingChoices->setVisible(true); + else if ( screenCode == "csjiudian" ) + parentChildChoices->setVisible(true); + else if ( screenCode == "csjiudian" ) + sportsChoices->setVisible(true); +} + +void SortWidget::setSubScreenBtns(QString str) +{ + InvisibleAllSubScreenBtns(); + if ( str == "美食" ) + { + foodChoices->setVisible(true); + screenCode = "csmeishi"; + } + else if ( str == "酒店" ) + { + hotelChoices->setVisible(true); + screenCode = "csjiudian"; + } + else if ( str == "民宿" ) + { + houseChoices->setVisible(true); + screenCode = "csjiudian"; + } + else if ( str == "休闲娱乐/KTV" ) + { + entertainmentChoices->setVisible(true); + screenCode = "csjiudian"; + } + else if ( str == "生活服务" ) + { + serviceChoices->setVisible(true); + screenCode = "csjiudian"; + } + else if ( str == "丽人/美发/医学美容" ) + { + beautyChoices->setVisible(true); + screenCode = "csjiudian"; + } + else if ( str == "结婚/婚纱摄影/婚宴" ) + { + weddingChoices->setVisible(true); + screenCode = "csjiudian"; + } + else if ( str == "亲子/儿童乐园/幼教" ) + { + parentChildChoices->setVisible(true); + screenCode = "csjiudian"; + } + else if ( str == "运动健身/健身中心" ) + { + sportsChoices->setVisible(true); + screenCode = "csjiudian"; + } + screenStr = str; + Screen(screenStr); +} + +void SortWidget::Screen(QString str) +{ + QString database="meituan"; + connector->connectToDatabase(database); + QSqlQuery query(db); + //读取数据库,获取按钮信息,初始化各List + screenStr = str; + if ( str == "美食" || str == "酒店" || str == "民宿" || str == "休闲娱乐/KTV" || str == "生活服务" || str == "丽人/美发/医学美容" || str == "结婚/婚纱摄影/婚宴" || str == "亲子/儿童乐园/幼教" || str == "运动健身/健身中心" ) + queryDatabase(query, "select * from " + screenCode + " limit " + QString::number(row)); + else + queryDatabase(query, "select * from " + screenCode + " where cateId=\"" + str + "\" limit " + QString::number(row)); + size = fmin(size, row); + + scroll->takeWidget(); + subWidget->deleteLater(); + subWidget = new QWidget(); + subVerLayout->deleteLater(); + subVerLayout = new QVBoxLayout(); + + deleteWidgetsInLayout(subVerLayout); + + btnList = (QToolButton **)malloc(sizeof(QToolButton *) * size); + //初始化按钮 + for (int i = 0; i < size; i++) + btnList[i] = new QToolButton(); + + setBtns(); + + for (int i = 0; i < size; i++) + subVerLayout->addWidget(btnList[i]); + subWidget->setLayout(subVerLayout); + scroll->setWidget(subWidget); + + query.finish(); + connector->closeDatabase(); + setPageMaxNumber(str); + setPageBtns(); +} + +void SortWidget::setPageBtns() +{ + if ( pageNumber == 0 ) + backButton->setVisible(false); + else + backButton->setVisible(true); + if ( pageNumber + 1 == pageMaxNumber ) + nextButton->setVisible(false); + else + nextButton->setVisible(true); +} + +void SortWidget::setPageMaxNumber(QString str) +{ + QString database="meituan"; + connector->connectToDatabase(database); + QSqlQuery query(db); + //读取数据库,获取按钮信息,初始化各List + if ( str == "美食" || str == "酒店" || str == "民宿" || str == "休闲娱乐/KTV" || str == "生活服务" || str == "丽人/美发/医学美容" || str == "结婚/婚纱摄影/婚宴" || str == "亲子/儿童乐园/幼教" || str == "运动健身/健身中心" ) + query.exec("select count(1) from " + screenCode); + else + query.exec("select count(1) from " + screenCode + " where cateId = \"" + str + "\""); + query.next(); + pageMaxNumber = query.value(0).toInt() / row + 1; + pageNumber = 0; + query.finish(); + connector->closeDatabase(); +} + +void SortWidget::nextPage() +{ + QString database="meituan"; + connector->connectToDatabase(database); + QSqlQuery query(db); + //读取数据库,获取按钮信息,初始化各List + if ( screenStr == "美食" || screenStr == "酒店" || screenStr == "民宿" || screenStr == "休闲娱乐/KTV" || screenStr == "生活服务" || screenStr == "丽人/美发/医学美容" || screenStr == "结婚/婚纱摄影/婚宴" || screenStr == "亲子/儿童乐园/幼教" || screenStr == "运动健身/健身中心" ) + queryDatabase(query, "select * from " + screenCode + " limit " + QString::number(row * (pageNumber + 1)) + "," + QString::number(row)); + else + queryDatabase(query, "select * from " + screenCode + " where cateId=\"" + screenStr + "\" limit " + QString::number(row * (pageNumber + 1)) + "," + QString::number(row)); + size = fmin(size, row); + + scroll->takeWidget(); + subWidget->deleteLater(); + subWidget = new QWidget(); + subVerLayout->deleteLater(); + subVerLayout = new QVBoxLayout(); + + deleteWidgetsInLayout(subVerLayout); + + btnList = (QToolButton **)malloc(sizeof(QToolButton *) * size); + //初始化按钮 + for (int i = 0; i < size; i++) + btnList[i] = new QToolButton(); + + setBtns(); + + for (int i = 0; i < size; i++) + subVerLayout->addWidget(btnList[i]); + subWidget->setLayout(subVerLayout); + scroll->setWidget(subWidget); + + query.finish(); + connector->closeDatabase(); + pageNumber++; + setPageBtns(); +} + +void SortWidget::backPage() +{ + QString database="meituan"; + connector->connectToDatabase(database); + QSqlQuery query(db); + //读取数据库,获取按钮信息,初始化各List + if ( screenStr == "美食" || screenStr == "酒店" || screenStr == "民宿" || screenStr == "休闲娱乐/KTV" || screenStr == "生活服务" || screenStr == "丽人/美发/医学美容" || screenStr == "结婚/婚纱摄影/婚宴" || screenStr == "亲子/儿童乐园/幼教" || screenStr == "运动健身/健身中心" ) + queryDatabase(query, "select * from " + screenCode + " limit " + QString::number(row * (pageNumber - 1)) + "," + QString::number(row)); + else + queryDatabase(query, "select * from " + screenCode + " where cateId=\"" + screenStr + "\" limit " + QString::number(row * (pageNumber - 1)) + "," + QString::number(row)); + size = fmin(size, row); + + scroll->takeWidget(); + subWidget->deleteLater(); + subWidget = new QWidget(); + subVerLayout->deleteLater(); + subVerLayout = new QVBoxLayout(); + + deleteWidgetsInLayout(subVerLayout); + + btnList = (QToolButton **)malloc(sizeof(QToolButton *) * size); + //初始化按钮 + for (int i = 0; i < size; i++) + btnList[i] = new QToolButton(); + + setBtns(); + + for (int i = 0; i < size; i++) + subVerLayout->addWidget(btnList[i]); + subWidget->setLayout(subVerLayout); + scroll->setWidget(subWidget); + + query.finish(); + connector->closeDatabase(); + pageNumber--; + setPageBtns(); +} + +void SortWidget::deleteWidgetsInLayout(QLayout * layout) +{ + QLayoutItem * child; + while ((child = layout->takeAt(0)) != 0) + { + layout->removeWidget(child->widget()); + child->widget()->setParent(0); + delete child; + } +} diff --git a/src/ChangShaTour/sortwidget.h b/src/ChangShaTour/sortwidget.h index 92b1768..d63d259 100644 --- a/src/ChangShaTour/sortwidget.h +++ b/src/ChangShaTour/sortwidget.h @@ -1,7 +1,19 @@ -#ifndef SORTWIDGET_H +#ifndef SORTWIDGET_H #define SORTWIDGET_H #include +#include +#include +#include +#include +#include +#include +#include "webwidget.h" +#include "databaseconnector.h" + +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif namespace Ui { class SortWidget; @@ -14,9 +26,69 @@ class SortWidget : public QWidget public: explicit SortWidget(QWidget *parent = nullptr); ~SortWidget(); + QToolButton * setBtn(QToolButton *btn, const QString text); + void queryDatabase(QSqlQuery query, QString statement); + void setBtns(); + void webReturn(); + void initSubScreenBtns(QWidget * choices, QString str); + void initAllSubScreenBtns(); + void InvisibleAllSubScreenBtns(); + void ShowSubScreenBtn(); + void setScreenBtns(); + void setPageBtns(); + void setPageMaxNumber(QString str); +public slots: + void setSubScreenBtns(QString screenStr); + void Screen(QString str); + void nextPage(); + void backPage(); + void deleteWidgetsInLayout(QLayout * layout); private: Ui::SortWidget *ui; + + WebWidget *web; + DatabaseConnector * connector; + QSqlDatabase db; + + QStringList urlList; + QStringList imgList; + QStringList textList; + QStringList idList; + + QVBoxLayout * verLayout; + + QWidget * funcWidget; + + QWidget * subWidget; + QVBoxLayout * subVerLayout; + + int row = 30; + int size; + QSignalMapper * signalMapper; + QSignalMapper * subSignalMapper; + QString screenStr = "美食"; + QString screenCode = "csmeishi"; + QWidget * foodChoices; + QWidget * hotelChoices; + QWidget * houseChoices; + QWidget * entertainmentChoices; + QWidget * serviceChoices; + QWidget * beautyChoices; + QWidget * weddingChoices; + QWidget * parentChildChoices; + QWidget * sportsChoices; + + QToolButton ** btnList; + + QScrollArea * scroll; + + QWidget * pageWidget; + QHBoxLayout * pageHoriLayout; + QPushButton * nextButton; + QPushButton * backButton; + int pageMaxNumber; + int pageNumber; }; #endif // SORTWIDGET_H diff --git a/src/ChangShaTour/userinfowidget.cpp b/src/ChangShaTour/userinfowidget.cpp index 193999d..2f713c5 100644 --- a/src/ChangShaTour/userinfowidget.cpp +++ b/src/ChangShaTour/userinfowidget.cpp @@ -1,8 +1,12 @@ -#include "userinfowidget.h" +#include "userinfowidget.h" #include "ui_userinfowidget.h" - +#include "cglobal.h" #include #include +#include +#include +#include +#include UserInfoWidget::UserInfoWidget(QWidget *parent) : QWidget(parent), @@ -11,9 +15,41 @@ UserInfoWidget::UserInfoWidget(QWidget *parent) : ui->setupUi(this); QVBoxLayout *layout = new QVBoxLayout(); + QHBoxLayout *accountHLayout=new QHBoxLayout(); + QHBoxLayout *passwordHLayout=new QHBoxLayout(); + qDebug()<connectToDatabase(database); + QSqlQuery query(db); + query.prepare("select email,password from account where id=?"); + query.addBindValue(Id); + query.exec(); + query.next(); + QString accountget=query.value("email").toString(); + QString passwordget=query.value("password").toString(); + //Id=query.value("id").toInt(); + //qDebug()<closeDatabase(); + QLabel * accountLabel = new QLabel("邮箱"); + QLineEdit * accountLine = new QLineEdit(); + accountLine->setText(accountget); + accountHLayout->addWidget(accountLabel); + accountHLayout->addWidget(accountLine); + QLabel * passwordLabel = new QLabel("密码"); + QLineEdit * passwordLine = new QLineEdit(); + passwordLine->setText(passwordget); + passwordLine->setEchoMode(QLineEdit::Password); + passwordHLayout->addWidget(passwordLabel); + passwordHLayout->addWidget(passwordLine); + QPushButton * modifyButton = new QPushButton("修改"); + layout->addWidget(modifyButton); + layout->addLayout(accountHLayout); + layout->addLayout(passwordHLayout); setLayout(layout); - layout->addWidget(new QLabel("UserInfoWidget")); + //layout->addWidget(new QLabel("UserInfoWidget")); } UserInfoWidget::~UserInfoWidget() diff --git a/src/ChangShaTour/userinfowidget.h b/src/ChangShaTour/userinfowidget.h index 390303a..823e3f5 100644 --- a/src/ChangShaTour/userinfowidget.h +++ b/src/ChangShaTour/userinfowidget.h @@ -1,7 +1,13 @@ -#ifndef USERINFOWIDGET_H +#ifndef USERINFOWIDGET_H #define USERINFOWIDGET_H #include +#include +#include "databaseconnector.h" + +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif namespace Ui { class UserInfoWidget; @@ -13,6 +19,8 @@ class UserInfoWidget : public QWidget public: explicit UserInfoWidget(QWidget *parent = nullptr); + DatabaseConnector * connect; + QSqlQuery query; ~UserInfoWidget(); private: diff --git a/src/ChangShaTour/userwidget.cpp b/src/ChangShaTour/userwidget.cpp index ed63113..03199bf 100644 --- a/src/ChangShaTour/userwidget.cpp +++ b/src/ChangShaTour/userwidget.cpp @@ -1,4 +1,4 @@ -#include "userwidget.h" +#include "userwidget.h" #include "ui_userwidget.h" UserWidget::UserWidget(QWidget *parent) : @@ -12,7 +12,7 @@ UserWidget::UserWidget(QWidget *parent) : horLayout = new QHBoxLayout(); userInfoBtn = new QPushButton("个人资料"); journyBtn = new QPushButton("行程"); - favoriteBtn = new QPushButton("Favorite"); + favoriteBtn = new QPushButton("收藏夹"); historyBtn = new QPushButton("历史记录"); //默认初始选择为个人资料 pageIndex = 0; diff --git a/src/ChangShaTour/userwidget.h b/src/ChangShaTour/userwidget.h index eafcdfc..c3b717f 100644 --- a/src/ChangShaTour/userwidget.h +++ b/src/ChangShaTour/userwidget.h @@ -1,4 +1,4 @@ -#ifndef USERWIDGET_H +#ifndef USERWIDGET_H #define USERWIDGET_H #include @@ -10,6 +10,10 @@ #include "favoritewidget.h" #include "historywidget.h" +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + namespace Ui { class UserWidget; } diff --git a/src/ChangShaTour/webwidget.cpp b/src/ChangShaTour/webwidget.cpp index 8d0c396..bfad069 100644 --- a/src/ChangShaTour/webwidget.cpp +++ b/src/ChangShaTour/webwidget.cpp @@ -1,4 +1,4 @@ -#include "webwidget.h" +#include "webwidget.h" #include "ui_webwidget.h" WebWidget::WebWidget(QWidget *parent) : @@ -12,6 +12,7 @@ WebWidget::WebWidget(QWidget *parent) : horLayout = new QHBoxLayout(); view = new QWebEngineView(); + add = new QPushButton("添加"); rtn = new QPushButton("返回"); setLayout(verLayout); @@ -19,10 +20,27 @@ WebWidget::WebWidget(QWidget *parent) : verLayout->addLayout(horLayout); verLayout->addWidget(view); + horLayout->addWidget(add); horLayout->addWidget(rtn); + add->setVisible(false); } WebWidget::~WebWidget() { delete ui; } + +QPushButton *WebWidget::getAddBtn() +{ + return add; +} + +QPushButton *WebWidget::getReturnBtn() +{ + return rtn; +} + +void WebWidget::loadPage(QString url) +{ + view->load(QUrl(url)); +} diff --git a/src/ChangShaTour/webwidget.h b/src/ChangShaTour/webwidget.h index bf4ea72..9977cf8 100644 --- a/src/ChangShaTour/webwidget.h +++ b/src/ChangShaTour/webwidget.h @@ -1,4 +1,4 @@ -#ifndef WEBWIDGET_H +#ifndef WEBWIDGET_H #define WEBWIDGET_H #include @@ -6,6 +6,11 @@ #include #include #include +#include + +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif namespace Ui { class WebWidget; @@ -18,14 +23,22 @@ class WebWidget : public QWidget public: explicit WebWidget(QWidget *parent = nullptr); ~WebWidget(); + QPushButton *getReturnBtn(); + QPushButton *getAddBtn(); + void loadPage(QString url); - QPushButton *rtn; - QWebEngineView *view; - QVBoxLayout *verLayout; - QHBoxLayout *horLayout; private: Ui::WebWidget *ui; + + QVBoxLayout *verLayout; + + QHBoxLayout *horLayout; + QPushButton *add; + QPushButton *rtn; + + QWebEngineView *view; + }; #endif // WEBWIDGET_H