实现了猜你喜欢,分类检索,历史记录,榜单以及搜索等界面的基本框架,排版和实现仍然等待改进。

master
DongYanqi1029 4 years ago
parent 37261c2457
commit c6db98b629

@ -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 \

@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.11.1, 2020-12-07T09:55:58. -->
<!-- Written by QtCreator 4.11.1, 2021-07-01T00:04:39. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{4109ff11-a646-43d1-9619-aeb32783df6e}</value>
<value type="QByteArray">{61ba832e-6c30-4ab6-b0b8-ace44f46ca0c}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">1</value>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
@ -44,8 +44,8 @@
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.UseGlobal">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">0</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
@ -64,14 +64,257 @@
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win64_mingw73_kit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MSVC2017 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MSVC2017 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win64_msvc2017_64_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">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</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">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</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">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</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:D:/ChangShaTour/ChangShaTour.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">D:/ChangShaTour/ChangShaTour.pro</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">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</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.1</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win32_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">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</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@ -119,7 +362,7 @@
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">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</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@ -167,7 +410,7 @@
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">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</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@ -305,16 +548,16 @@
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.1</variable>
<variable>ProjectExplorer.Project.Target.2</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MSVC2017 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MSVC2017 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win64_msvc2017_64_kit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win64_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">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</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@ -362,7 +605,7 @@
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">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</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@ -410,7 +653,7 @@
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">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</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@ -530,26 +773,26 @@
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:E:/ChangShaTour/Trip-in-Chang-sha/ChangShaTour/ChangShaTour.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">E:/ChangShaTour/Trip-in-Chang-sha/ChangShaTour/ChangShaTour.pro</value>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">2</value>
<value type="int">3</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>

@ -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();
}

@ -0,0 +1,17 @@
#ifndef ADDHISTORY_H
#define ADDHISTORY_H
#include <QString>
#include <QSqlQuery>
#include <databaseconnector.h>
class AddHistory
{
public:
AddHistory();
void add(QString id);
private:
int limit;
DatabaseConnector *connect;
};
#endif // ADDHISTORY_H

@ -0,0 +1,7 @@
#include "cglobal.h"
qint64 Id;
cglobal::cglobal()
{
}

@ -0,0 +1,12 @@
#ifndef CGLOBAL_H
#define CGLOBAL_H
#include <QVariant>
//全局变量定义文件include该文件即可获得用户Id
extern qint64 Id;
class cglobal
{
public:
cglobal();
};
#endif // CGLOBAL_H

@ -1,4 +1,4 @@
#include "conditionwidget.h"
#include "conditionwidget.h"
#include "ui_conditionwidget.h"
ConditionWidget::ConditionWidget(QWidget *parent) :

@ -1,4 +1,4 @@
#ifndef CONDITIONWIDGET_H
#ifndef CONDITIONWIDGET_H
#define CONDITIONWIDGET_H
#include <QWidget>
@ -8,6 +8,10 @@
#include <QValidator>
#include <QDateTimeEdit>
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
namespace Ui {
class ConditionWidget;
}

@ -1,4 +1,4 @@
#include "confirmwidget.h"
#include "confirmwidget.h"
#include "ui_confirmwidget.h"
#include <QLabel>

@ -1,10 +1,15 @@
#ifndef CONFIRMWIDGET_H
#ifndef CONFIRMWIDGET_H
#define CONFIRMWIDGET_H
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
namespace Ui {
class ConfirmWidget;
}

@ -1,4 +1,4 @@
#include "customizewidget.h"
#include "customizewidget.h"
#include "ui_customizewidget.h"
CustomizeWidget::CustomizeWidget(QWidget *parent) :

@ -1,8 +1,12 @@
#ifndef CUSTOMIZEWIDGET_H
#ifndef CUSTOMIZEWIDGET_H
#define CUSTOMIZEWIDGET_H
#include <QWidget>
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
namespace Ui {
class CustomizeWidget;
}

@ -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");
}

@ -1,18 +1,23 @@
#ifndef DATABASECONNECTOR_H
#ifndef DATABASECONNECTOR_H
#define DATABASECONNECTOR_H
#include <QSqlDatabase>
#include <QSqlQuery>
#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();
};

@ -1,4 +1,4 @@
#include "favoritewidget.h"
#include "favoritewidget.h"
#include "ui_favoritewidget.h"
#include <QVBoxLayout>

@ -1,8 +1,12 @@
#ifndef FAVORITEWIDGET_H
#ifndef FAVORITEWIDGET_H
#define FAVORITEWIDGET_H
#include <QWidget>
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
namespace Ui {
class FavoriteWidget;
}

@ -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<QString>();
historyList.append(historyQuery.value("url").value<QString>());
}
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<QString>();
nameList.append(shopQuery.value("title").value<QString>());
}
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);
}

@ -1,7 +1,19 @@
#ifndef HISTORYWIDGET_H
#ifndef HISTORYWIDGET_H
#define HISTORYWIDGET_H
#include <QWidget>
#include <QStringList>
#include <QPushButton>
#include <QSize>
#include <QScrollArea>
#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

@ -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;

@ -1,4 +1,4 @@
#ifndef HOMEWIDGET_H
#ifndef HOMEWIDGET_H
#define HOMEWIDGET_H
#include <QWidget>
@ -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;
}

@ -1,4 +1,4 @@
#include "imgdownloader.h"
#include "imgdownloader.h"
imgDownloader::imgDownloader()
{

@ -1,4 +1,4 @@
#ifndef IMGDOWNLOADER_H
#ifndef IMGDOWNLOADER_H
#define IMGDOWNLOADER_H
#include <QString>
@ -13,6 +13,10 @@
#include <QTimer>
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
class imgDownloader
{
public:

@ -1,4 +1,4 @@
#include "journywidget.h"
#include "journywidget.h"
#include "ui_journywidget.h"
JournyWidget::JournyWidget(QWidget *parent) :

@ -1,8 +1,12 @@
#ifndef JOURNYWIDGET_H
#ifndef JOURNYWIDGET_H
#define JOURNYWIDGET_H
#include <QWidget>
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
namespace Ui {
class JournyWidget;
}

@ -1,4 +1,4 @@
#include "listwidget.h"
#include "listwidget.h"
#include "ui_listwidget.h"
#include <QVBoxLayout>
@ -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;
}

@ -1,7 +1,19 @@
#ifndef LISTWIDGET_H
#ifndef LISTWIDGET_H
#define LISTWIDGET_H
#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QPushButton>
#include <QFont>
#include <QSizePolicy>
#include <QToolButton>
#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

@ -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()<<Id;
db.close();
if(passwordget==password)
{
query.finish();
connect->closeDatabase();
return true;
}
else
{
query.finish();
connect->closeDatabase();
return false;
}
}

@ -0,0 +1,20 @@
#ifndef LOGINMANAGER_H
#define LOGINMANAGER_H
#include "databaseconnector.h"
#include <QSqlQuery>
#include <QVariant>
#include <QDebug>
class LoginManager
{
public:
LoginManager();
bool loginVerify(QString account,QString password);
private:
DatabaseConnector * connect;
};
#endif // LOGINMANAGER_H

@ -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;

@ -1,4 +1,4 @@
#ifndef LOGINWIDGET_H
#ifndef LOGINWIDGET_H
#define LOGINWIDGET_H
#include <QWidget>
@ -6,6 +6,11 @@
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QVariant>
#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;

@ -1,4 +1,4 @@
#include "mainwindow.h"
#include "mainwindow.h"
#include <QApplication>

@ -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()

@ -1,4 +1,4 @@
#ifndef MAINWIDGET_H
#ifndef MAINWIDGET_H
#define MAINWIDGET_H
#include <QWidget>
@ -6,8 +6,14 @@
#include <QLineEdit>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QMessageBox>
#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

@ -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()<<accountLogin<<" "<<passwordLogin;
LoginManager *loginmanage=new LoginManager();
if(accountLogin=="")
{
QMessageBox::warning(this,"警告","请输入用户名!",QMessageBox::Yes);
}
else if(passwordLogin=="")
{
QMessageBox::warning(this,"警告","请输入密码!",QMessageBox::Yes);
}
else if(loginmanage->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()

@ -1,14 +1,21 @@
#ifndef MAINWINDOW_H
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#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

@ -1,4 +1,4 @@
#include "planwidget.h"
#include "planwidget.h"
#include "ui_planwidget.h"
PlanWidget::PlanWidget(QWidget *parent) :

@ -1,4 +1,4 @@
#ifndef PLANWIDGET_H
#ifndef PLANWIDGET_H
#define PLANWIDGET_H
#include <QWidget>
@ -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;
}

@ -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);

@ -1,4 +1,4 @@
#ifndef PREFERENCEWIDGET_H
#ifndef PREFERENCEWIDGET_H
#define PREFERENCEWIDGET_H
#include <QWidget>
@ -7,6 +7,10 @@
#include <QLineEdit>
#include <QTextEdit>
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
namespace Ui {
class PreferenceWidget;
}

@ -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>();
QString score = QString::number(avgscore.value<double>());
QString commentNum = QString::number(comments.value<qlonglong>());
QString addr = address.value<QString>();
QString price = QString::number(avgprice.value<qlonglong>());
QString text = name + "\n" + score + "" + commentNum + "条评论\n" + addr + "\n" + "人均" + price;
idList.append(id.value<QString>());
urlList.append(detail.value<QString>());
imgList.append(frontimg.value<QString>());
textList.append(text);
}
/*for (int i = 0; i < row; i++)
//初始化按钮
for (int i = 0; i < row; i++)
{
for (int j = 0; j <column; j++)
{
int index = i * column + j;
btnList[index] = new QToolButton();
//下载图片到本地
// QString imgPath = ":/images" + idList[index] + ".jpg";
QString imgPath = "D:/Study/SE/project/images/trial/" + idList[index] + ".jpg";
imgDownloader *download = new imgDownloader();
download->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>();
QString score = QString::number(avgscore.value<double>());
QString commentNum = QString::number(comments.value<qlonglong>());
QString addr = address.value<QString>();
QString price = QString::number(avgprice.value<qlonglong>());
QString text = name + "\n" + score + "" + commentNum + "条评论\n" + addr + "\n" + "人均" + price + "";
idList.append(id.value<QString>());
urlList.append(detail.value<QString>());
imgList.append(frontimg.value<QString>());
textList.append(text);
}
}
void RecommendWidget::setBtns()
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j <column; j++)
{
int index = i * column + j;
//下载图片到本地
// QString imgPath = ":/images" + idList[index] + ".jpg";
// QString imgPath = "D:/kunlin/OneDrive/QT project/images/" + idList[index] + ".jpg";
// qDebug() << QDir::currentPath();
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]);
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()

@ -1,4 +1,4 @@
#ifndef RECOMMENDWIDGET_H
#ifndef RECOMMENDWIDGET_H
#define RECOMMENDWIDGET_H
#include <QWidget>
@ -11,9 +11,17 @@
#include <QUrl>
#include <QSqlQuery>
#include <QDebug>
#include <QDir>
#include <QScrollBar>
#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

@ -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;
}

@ -0,0 +1,24 @@
#ifndef REGISTERMANAGER_H
#define REGISTERMANAGER_H
#include "databaseconnector.h"
#include <QSqlQuery>
#include <QVariant>
#include <QMessageBox>
#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

@ -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;
}

@ -0,0 +1,53 @@
#ifndef REGISTERWIDGET_H
#define REGISTERWIDGET_H
#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#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

@ -0,0 +1,21 @@
<ui version="4.0">
<author/>
<comment/>
<exportmacro/>
<class>RegisterWidget</class>
<widget name="RegisterWidget" class="QWidget">
<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>
<pixmapfunction/>
<connections/>
</ui>

@ -1,4 +1,4 @@
#include "routechoicewidget.h"
#include "routechoicewidget.h"
#include "ui_routechoicewidget.h"
RouteChoiceWidget::RouteChoiceWidget(QWidget *parent) :

@ -1,8 +1,12 @@
#ifndef ROUTECHOICEWIDGET_H
#ifndef ROUTECHOICEWIDGET_H
#define ROUTECHOICEWIDGET_H
#include <QWidget>
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
namespace Ui {
class RouteChoiceWidget;
}

@ -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 <showLimit; i++)
{
int index = i;
btnList[index] = new QToolButton();
btnList[index] = setBtn(btnList[index], "D:/Study/SE/project/images/transparent.png", "");
}
switchLine = new QHBoxLayout();
up = new QPushButton("上一页");
down = new QPushButton("下一页");
connector = new DatabaseConnector();
//设置布局
this->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:" <<segment;
}
void SearchResultWidget::getTotalNum()
{
//查询条目数
connector->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<qlonglong>();
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>();
QString score = QString::number(avgscore.value<double>());
QString commentNum = QString::number(comments.value<qlonglong>());
QString addr = address.value<QString>();
QString price = QString::number(avgprice.value<qlonglong>());
QString text = name + "\n" + score + "" + commentNum + "条评论\n" + addr + "\n" + "人均" + price + "";
idList.append(id.value<QString>());
urlList.append(detail.value<QString>());
imgList.append(frontimg.value<QString>());
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());
}

@ -0,0 +1,81 @@
#ifndef SEARCHRESULTWIDGET_H
#define SEARCHRESULTWIDGET_H
#include <QWidget>
#include <QPushButton>
#include <QToolButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QSqlQuery>
#include <QVariant>
#include <QDebug>
#include <QScrollArea>
#include <QScrollBar>
#include <QLabel>
#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

@ -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;
}

@ -0,0 +1,22 @@
#ifndef SEARCHWIDGET_H
#define SEARCHWIDGET_H
#include <QWidget>
namespace Ui {
class SearchWidget;
}
class SearchWidget : public QWidget
{
Q_OBJECT
public:
explicit SearchWidget(QWidget *parent = nullptr);
~SearchWidget();
private:
Ui::SearchWidget *ui;
};
#endif // SEARCHWIDGET_H

@ -0,0 +1,21 @@
<ui version="4.0">
<author/>
<comment/>
<exportmacro/>
<class>SearchWidget</class>
<widget name="SearchWidget" class="QWidget">
<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>
<pixmapfunction/>
<connections/>
</ui>

@ -1,4 +1,4 @@
#include "showplaceinfowidget.h"
#include "showplaceinfowidget.h"
#include "ui_showplaceinfowidget.h"
ShowPlaceInfoWidget::ShowPlaceInfoWidget(QWidget *parent) :

@ -1,8 +1,12 @@
#ifndef SHOWPLACEINFOWIDGET_H
#ifndef SHOWPLACEINFOWIDGET_H
#define SHOWPLACEINFOWIDGET_H
#include <QWidget>
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
namespace Ui {
class ShowPlaceInfoWidget;
}

@ -1,4 +1,4 @@
#include "showrouteinfowidget.h"
#include "showrouteinfowidget.h"
#include "ui_showrouteinfowidget.h"
ShowRouteInfoWidget::ShowRouteInfoWidget(QWidget *parent) :

@ -1,8 +1,12 @@
#ifndef SHOWROUTEINFOWIDGET_H
#ifndef SHOWROUTEINFOWIDGET_H
#define SHOWROUTEINFOWIDGET_H
#include <QWidget>
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
namespace Ui {
class ShowRouteInfoWidget;
}

@ -1,22 +1,450 @@
#include "sortwidget.h"
#include "sortwidget.h"
#include "ui_sortwidget.h"
#include <QVBoxLayout>
#include <QLabel>
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>();
QString score = QString::number(avgscore.value<double>());
QString commentNum = QString::number(comments.value<qlonglong>());
QString addr = address.value<QString>();
QString price = QString::number(avgprice.value<qlonglong>());
QString text = name + " " + score + "" + commentNum + "条评论 " + addr + " " + "人均" + price + "";
idList.append(id.value<QString>());
urlList.append(detail.value<QString>());
imgList.append(frontimg.value<QString>());
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;
}
}

@ -1,7 +1,19 @@
#ifndef SORTWIDGET_H
#ifndef SORTWIDGET_H
#define SORTWIDGET_H
#include <QWidget>
#include <QBoxLayout>
#include <QSqlQuery>
#include <QToolButton>
#include <QScrollArea>
#include <QSignalMapper>
#include <QLineEdit>
#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

@ -1,8 +1,12 @@
#include "userinfowidget.h"
#include "userinfowidget.h"
#include "ui_userinfowidget.h"
#include "cglobal.h"
#include <QVBoxLayout>
#include <QLabel>
#include <QDebug>
#include <QHBoxLayout>
#include <QLineEdit>
#include <QPushButton>
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()<<Id;
connect=new DatabaseConnector();
QString database="user";
connect->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()<<Id;
query.finish();
connect->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()

@ -1,7 +1,13 @@
#ifndef USERINFOWIDGET_H
#ifndef USERINFOWIDGET_H
#define USERINFOWIDGET_H
#include <QWidget>
#include <QSqlQuery>
#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:

@ -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;

@ -1,4 +1,4 @@
#ifndef USERWIDGET_H
#ifndef USERWIDGET_H
#define USERWIDGET_H
#include <QWidget>
@ -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;
}

@ -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));
}

@ -1,4 +1,4 @@
#ifndef WEBWIDGET_H
#ifndef WEBWIDGET_H
#define WEBWIDGET_H
#include <QWidget>
@ -6,6 +6,11 @@
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QUrl>
#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

Loading…
Cancel
Save