diff --git a/src/ChangShaTour/ChangShaTour.pro b/src/ChangShaTour/ChangShaTour.pro index 0e76c6c..87eabcc 100644 --- a/src/ChangShaTour/ChangShaTour.pro +++ b/src/ChangShaTour/ChangShaTour.pro @@ -22,6 +22,7 @@ SOURCES += \ customizewidget.cpp \ databaseconnector.cpp \ favoritewidget.cpp \ + feedbackwidget.cpp \ historywidget.cpp \ homewidget.cpp \ imgdownloader.cpp \ @@ -32,6 +33,7 @@ SOURCES += \ main.cpp \ mainwidget.cpp \ mainwindow.cpp \ + modifywidget.cpp \ planwidget.cpp \ popwidget.cpp \ preferencewidget.cpp \ @@ -59,6 +61,7 @@ HEADERS += \ customizewidget.h \ databaseconnector.h \ favoritewidget.h \ + feedbackwidget.h \ historywidget.h \ homewidget.h \ imgdownloader.h \ @@ -68,6 +71,7 @@ HEADERS += \ loginwidget.h \ mainwidget.h \ mainwindow.h \ + modifywidget.h \ planwidget.h \ popwidget.h \ preferencewidget.h \ @@ -93,6 +97,7 @@ FORMS += \ customizewidget.ui \ databaseconnector.ui \ favoritewidget.ui \ + feedbackwidget.ui \ historywidget.ui \ homewidget.ui \ journywidget.ui \ @@ -100,6 +105,7 @@ FORMS += \ loginwidget.ui \ mainwidget.ui \ mainwindow.ui \ + modifywidget.ui \ planwidget.ui \ popwidget.ui \ preferencewidget.ui \ diff --git a/src/ChangShaTour/ChangShaTour.pro.user b/src/ChangShaTour/ChangShaTour.pro.user index c85a543..8e2f2eb 100644 --- a/src/ChangShaTour/ChangShaTour.pro.user +++ b/src/ChangShaTour/ChangShaTour.pro.user @@ -1,10 +1,10 @@ - + EnvironmentId - {0c4c8ccc-c524-4850-ba23-7e124d5915df} + {61ba832e-6c30-4ab6-b0b8-ace44f46ca0c} ProjectExplorer.Project.ActiveTarget @@ -44,8 +44,8 @@ true 0 8 - true - 1 + false + 0 true true true @@ -67,11 +67,11 @@ Desktop Qt 5.14.2 MSVC2017 64bit Desktop Qt 5.14.2 MSVC2017 64bit qt.qt5.5142.win64_msvc2017_64_kit - 1 + 0 0 0 - F:/QtDemo/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug + D:/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug true @@ -119,7 +119,7 @@ 2 - F:/QtDemo/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Release + D:/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Release true @@ -167,7 +167,7 @@ 0 - F:/QtDemo/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Profile + D:/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Profile true @@ -287,8 +287,9 @@ 2 - Qt4ProjectManager.Qt4RunConfiguration:F:/QtDemo/ChangShaTour/ChangShaTour.pro - F:/QtDemo/ChangShaTour/ChangShaTour.pro + ChangShaTour2 + Qt4ProjectManager.Qt4RunConfiguration:D:/gitRepositories/TourInChangSha/src/ChangShaTour/ChangShaTour.pro + D:/gitRepositories/TourInChangSha/src/ChangShaTour/ChangShaTour.pro false @@ -299,14 +300,500 @@ false true - F:/QtDemo/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Release + D:/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug + + 1 + + + + ProjectExplorer.Project.Target.1 + + Desktop Qt 5.14.2 MinGW 32-bit + Desktop Qt 5.14.2 MinGW 32-bit + qt.qt5.5142.win32_mingw73_kit + 0 + 0 + 0 + + D:/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_32_bit-Debug + + + true + QtProjectManager.QMakeBuildStep + true + + false + false + false + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + + + D:/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_32_bit-Release + + + true + QtProjectManager.QMakeBuildStep + false + + false + false + true + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + + + D:/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_32_bit-Profile + + + true + QtProjectManager.QMakeBuildStep + true + + false + true + true + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + + 3 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + + ProjectExplorer.CustomExecutableRunConfiguration + + + false + + false + true + false + false + true + + + + 1 + + + + ProjectExplorer.Project.Target.2 + + Desktop Qt 5.14.2 MinGW 64-bit + Desktop Qt 5.14.2 MinGW 64-bit + qt.qt5.5142.win64_mingw73_kit + 0 + 0 + 0 + + D:/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Debug + + + true + QtProjectManager.QMakeBuildStep + true + + false + false + false + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + + + D:/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Release + + + true + QtProjectManager.QMakeBuildStep + false + + false + false + true + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + + + D:/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Profile + + + true + QtProjectManager.QMakeBuildStep + true + + false + true + true + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + + 3 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + + ProjectExplorer.CustomExecutableRunConfiguration + + + false + + false + true + false + false + true + + 1 ProjectExplorer.Project.TargetCount - 1 + 3 ProjectExplorer.Project.Updater.FileVersion diff --git a/src/ChangShaTour/RouteItem.h b/src/ChangShaTour/RouteItem.h index 7f450bd..dc6a9a8 100644 --- a/src/ChangShaTour/RouteItem.h +++ b/src/ChangShaTour/RouteItem.h @@ -10,8 +10,8 @@ struct routeItem{ QDateTime startTime; QDateTime endTime; QString traffic; - double distance; - double timeCost; + int distance; + int timeCost; QString description; struct routeItem * next; }; diff --git a/src/ChangShaTour/conditionwidget.cpp b/src/ChangShaTour/conditionwidget.cpp index aa9fa32..dbcfa0f 100644 --- a/src/ChangShaTour/conditionwidget.cpp +++ b/src/ChangShaTour/conditionwidget.cpp @@ -13,6 +13,7 @@ ConditionWidget::ConditionWidget(QWidget *parent) : void ConditionWidget::initConditionWidget() { QVBoxLayout * verticalLayout = new QVBoxLayout(); + verticalLayout->setMargin(30); /*QHBoxLayout * dateTimeHorizontalLayout = new QHBoxLayout(); QHBoxLayout * placeHorizontalLayout = new QHBoxLayout();*/ QHBoxLayout * dayHorizontalLayout = new QHBoxLayout(); @@ -37,23 +38,29 @@ void ConditionWidget::initConditionWidget() placeHorizontalLayout->addWidget(endPlaceLabel); placeHorizontalLayout->addWidget(endPlace);*/ - QLabel * dayLabel = new QLabel("天数"); + QLabel * dayLabel = new QLabel("天数: "); + InitLabel(dayLabel); dayLine = new QLineEdit(); + InitLineEdit(dayLine); dayLine->setPlaceholderText("请输入一个1~10之间的整数"); dayLine->setValidator(new QIntValidator(dayLine)); dayHorizontalLayout->addWidget(dayLabel); dayHorizontalLayout->addWidget(dayLine); - QLabel * numberLabel = new QLabel("人数"); + QLabel * numberLabel = new QLabel("人数: "); + InitLabel(numberLabel); numberLine = new QLineEdit(); + InitLineEdit(numberLine); numberLine->setPlaceholderText("请输入一个1~8之间的整数"); numberLine->setValidator(new QIntValidator(numberLine)); numberHorizontalLayout->addWidget(numberLabel); numberHorizontalLayout->addWidget(numberLine); - QLabel * budgetLabel = new QLabel("预算"); + QLabel * budgetLabel = new QLabel("预算: "); + InitLabel(budgetLabel); budgetLine = new QLineEdit(); - budgetLine->setPlaceholderText("请输入一个50000以内的整数"); + InitLineEdit(budgetLine); + budgetLine->setPlaceholderText("请输入一个1~50000之间的整数"); budgetLine->setValidator(new QIntValidator(budgetLine)); budgetHorizontalLayout->addWidget(budgetLabel); budgetHorizontalLayout->addWidget(budgetLine); @@ -63,6 +70,7 @@ void ConditionWidget::initConditionWidget() verticalLayout->addLayout(dayHorizontalLayout); verticalLayout->addLayout(numberHorizontalLayout); verticalLayout->addLayout(budgetHorizontalLayout); + verticalLayout->addStretch(); this->setLayout(verticalLayout); } @@ -86,3 +94,31 @@ ConditionWidget::~ConditionWidget() { delete ui; } + +void ConditionWidget::InitLabel(QLabel * label) +{ + QFont lbl_font("Microsoft YaHei"); + lbl_font.setPointSize(14); + lbl_font.setBold(true); + label->setFont(lbl_font); + label->setStyleSheet("color:#FFFFFF"); + //label->setAlignment(Qt::AlignRight); +} + +void ConditionWidget::InitLineEdit(QLineEdit * lineEdit) +{ + lineEdit->setStyleSheet("QLineEdit {" + " border-radius: 4px; " + " color:rgb(0, 0, 0); " + " background-color: rgba(225, 179, 124, 0.6);" + "} " + " QLineEdit:focus { " + " border-style:outset; " + //" border-width:4px; " + " border-radius: 4px; " + //" border-color: #C1D7F1; " + " color:#ffffff; " + " background-color: #D87B3A;" + "} "); + lineEdit->setFont(QFont("Microsoft YaHei" , 14, QFont::Bold)); +} diff --git a/src/ChangShaTour/conditionwidget.h b/src/ChangShaTour/conditionwidget.h index 2512dc4..f4fe8da 100644 --- a/src/ChangShaTour/conditionwidget.h +++ b/src/ChangShaTour/conditionwidget.h @@ -29,6 +29,9 @@ public: int getNumber(); int getBudget(); + void InitLabel(QLabel *); + void InitLineEdit(QLineEdit *); + private: Ui::ConditionWidget *ui; diff --git a/src/ChangShaTour/confirmwidget.cpp b/src/ChangShaTour/confirmwidget.cpp index cb2bb45..7c37c20 100644 --- a/src/ChangShaTour/confirmwidget.cpp +++ b/src/ChangShaTour/confirmwidget.cpp @@ -141,9 +141,9 @@ Route * ConfirmWidget::genRoute() routeItems = routeItems->next; routeItems->traffic = trafficCBoxList[i]->currentText(); routeItems->description = descriptionLabelList[i]->text(); - routeItems->distance = distanceLabelList[i]->text().split(":")[1].toDouble(); - routeItems->timeCost = timeCostLabelList[i]->text().split(":")[1].toDouble(); - if((routeItems->next->startTime.toTime_t()) - (routeItems->next->endTime.toTime_t()) < routeItems->timeCost) + routeItems->distance = distanceLabelList[i]->text().split(":")[1].toInt(); + routeItems->timeCost = timeCostLabelList[i]->text().split(":")[1].toInt(); + if((routeItems->next->startTime.toTime_t()) - (routeItems->endTime.toTime_t()) < routeItems->timeCost) { QMessageBox::warning(this,"警告","当前交通方式无法按时到达目的地!",QMessageBox::Yes); } diff --git a/src/ChangShaTour/customizewidget.cpp b/src/ChangShaTour/customizewidget.cpp index 4fde70c..e086e0f 100644 --- a/src/ChangShaTour/customizewidget.cpp +++ b/src/ChangShaTour/customizewidget.cpp @@ -6,6 +6,74 @@ CustomizeWidget::CustomizeWidget(QWidget *parent) : ui(new Ui::CustomizeWidget) { ui->setupUi(this); + + mainLayout = new QVBoxLayout(); + + limit = 10; + dayLimit = 3; + + title = new QLabel("现在开始定制您的路线\n点击空白按钮就可以向路线中添加场所\n场所的起始/结束时间表示了您想在该场所游玩的时间段"); + title->setAlignment(Qt::AlignCenter); + + format = new QHBoxLayout(); + format->addWidget(new QLabel("序号"),1); + format->addWidget(new QLabel("场所"),12); + format->addWidget(new QLabel("起始时间"),3); + format->addWidget(new QLabel("结束时间"),3); + format->addWidget(new QLabel(""),2); + format->addWidget(new QLabel(""),2); + + lineList = (QHBoxLayout **)malloc(sizeof(QHBoxLayout *) * limit); + labelList = (QLabel **)malloc(sizeof(QLabel *) * limit); + placeBtnList = (QPushButton **)malloc(sizeof(QPushButton *) * limit); + startEditList = (QDateTimeEdit **)malloc(sizeof(QDateTimeEdit *) * limit); + endEditList = (QDateTimeEdit **)malloc(sizeof(QDateTimeEdit *) * limit); + addBtnList = (QPushButton **)malloc(sizeof(QPushButton *) * limit); + delBtnList = (QPushButton **)malloc(sizeof(QPushButton *) * limit); + + spaceList = (QHBoxLayout **)malloc(sizeof(QHBoxLayout *) * (limit - 1)); + spacers = (QLabel **)malloc(sizeof(QLabel *) * (limit - 1)); + + this->setLayout(mainLayout); + mainLayout->setAlignment(Qt::AlignTop); + + //mainLayout->addWidget(title); + //mainLayout->addWidget(new QLabel("")); + mainLayout->addLayout(format); + + for (int i = 0; i < limit; i++) + { + lineList[i] = new QHBoxLayout(); + labelList[i] = new QLabel(QString::number(i+1)); + labelList[i]->setAlignment(Qt::AlignCenter); + placeBtnList[i] = new QPushButton(); + startEditList[i] = new QDateTimeEdit(); + endEditList[i] = new QDateTimeEdit(); + addBtnList[i] = new QPushButton("+"); + delBtnList[i] = new QPushButton("-"); + + mainLayout->addLayout(lineList[i]); + + lineList[i]->addWidget(labelList[i],1); + lineList[i]->addWidget(placeBtnList[i],12); + lineList[i]->addWidget(startEditList[i],3); + lineList[i]->addWidget(endEditList[i],3); + lineList[i]->addWidget(addBtnList[i],2); + lineList[i]->addWidget(delBtnList[i],2); + + connect(placeBtnList[i], &QPushButton::clicked, this, [=](){setBtn(i);}); + connect(addBtnList[i], &QPushButton::clicked, this, [=](){addAt(i);}); + connect(delBtnList[i], &QPushButton::clicked, this, [=](){delAt(i);}); + } + +// for (int i = 0; i < (limit - 1); i++) +// { +// spaceList[i] = new QHBoxLayout(); +// spacers[i] = new QLabel(); +// spaceList[i]->addWidget(spacers[i]); +// mainLayout->addLayout(spaceList[i]); +// } + } CustomizeWidget::~CustomizeWidget() @@ -29,7 +97,7 @@ void CustomizeWidget::addAt(int index) { num++; visibleAt(num - 1, true); - spacers[limit - num]->setVisible(false); +// spacers[limit - num]->setVisible(false); qDebug() << "Add at " << QString::number(index); for (int i = num - 1; i > index + 1; i--) @@ -64,7 +132,7 @@ void CustomizeWidget::delAt(int index) { num--; visibleAt(num, false); - spacers[limit - num - 1]->setVisible(true); +// spacers[limit - num - 1]->setVisible(true); qDebug() << "Del at " << QString::number(index); for (int i = index; i < num ; i++) @@ -124,8 +192,8 @@ bool CustomizeWidget::genRoute() QDateTime * startTime = new QDateTime[limit]; QDateTime * endTime = new QDateTime[limit]; QStringList trafficList; - double * distanceList = (double *)malloc(sizeof(double) * limit); - double * timeCostList = (double *)malloc(sizeof(double) * limit); + int * distanceList = (int *)malloc(sizeof(int) * limit); + int * timeCostList = (int *)malloc(sizeof(int) * limit); QStringList descriptionList; uint eTime = 4294967295; @@ -204,10 +272,9 @@ void CustomizeWidget::initInterface(Route *route) qDebug("Creating CustomizeWidget..."); num = 1; - limit = 15; - dayLimit = 3; r = route; int count = r->getLength(); + num = (num>count)?num:count; qDebug() <<"cust num"<next; j++; } + qDebug() << "j=" << j; for(j; j < limit; j++) { @@ -238,77 +306,25 @@ void CustomizeWidget::initInterface(Route *route) endTimeList[j] = QDateTime::currentDateTime(); } - mainLayout = new QVBoxLayout(); - - title = new QLabel("现在开始定制您的路线\n点击空白按钮就可以向路线中添加场所\n场所的起始/结束时间表示了您想在该场所游玩的时间段"); - title->setAlignment(Qt::AlignCenter); - - format = new QHBoxLayout(); - format->addWidget(new QLabel("序号"),1); - format->addWidget(new QLabel("场所"),12); - format->addWidget(new QLabel("起始时间"),3); - format->addWidget(new QLabel("结束时间"),3); - format->addWidget(new QLabel(""),2); - format->addWidget(new QLabel(""),2); - - lineList = (QHBoxLayout **)malloc(sizeof(QHBoxLayout *) * limit); - labelList = (QLabel **)malloc(sizeof(QLabel *) * limit); - placeBtnList = (QPushButton **)malloc(sizeof(QPushButton *) * limit); - startEditList = (QDateTimeEdit **)malloc(sizeof(QDateTimeEdit *) * limit); - endEditList = (QDateTimeEdit **)malloc(sizeof(QDateTimeEdit *) * limit); - addBtnList = (QPushButton **)malloc(sizeof(QPushButton *) * limit); - delBtnList = (QPushButton **)malloc(sizeof(QPushButton *) * limit); - - spaceList = (QHBoxLayout **)malloc(sizeof(QHBoxLayout *) * (limit - 1)); - spacers = (QLabel **)malloc(sizeof(QLabel *) * (limit - 1)); - - this->setLayout(mainLayout); -// mainLayout->setAlignment(Qt::AlignTop); - - //mainLayout->addWidget(title); - //mainLayout->addWidget(new QLabel("")); - mainLayout->addLayout(format); - for (int i = 0; i < limit; i++) { - lineList[i] = new QHBoxLayout(); - labelList[i] = new QLabel(QString::number(i+1)); - labelList[i]->setAlignment(Qt::AlignCenter); - placeBtnList[i] = new QPushButton(nameList[i]); - startEditList[i] = new QDateTimeEdit(startTimeList[i]); - endEditList[i] = new QDateTimeEdit(endTimeList[i]); - addBtnList[i] = new QPushButton("+"); - delBtnList[i] = new QPushButton("-"); - - mainLayout->addLayout(lineList[i]); - - lineList[i]->addWidget(labelList[i],1); - lineList[i]->addWidget(placeBtnList[i],12); - lineList[i]->addWidget(startEditList[i],3); - lineList[i]->addWidget(endEditList[i],3); - lineList[i]->addWidget(addBtnList[i],2); - lineList[i]->addWidget(delBtnList[i],2); - - connect(placeBtnList[i], &QPushButton::clicked, this, [=](){setBtn(i);}); - connect(addBtnList[i], &QPushButton::clicked, this, [=](){addAt(i);}); - connect(delBtnList[i], &QPushButton::clicked, this, [=](){delAt(i);}); + placeBtnList[i]->setText(nameList[i]); + startEditList[i]->setDateTime(startTimeList[i]); + endEditList[i]->setDateTime(endTimeList[i]); if (i >= num) - { visibleAt(i, false); - } + else + visibleAt(i, true); } - for (int i = 0; i < (limit - 1); i++) - { - spaceList[i] = new QHBoxLayout(); - spacers[i] = new QLabel(); - spaceList[i]->addWidget(spacers[i]); - mainLayout->addLayout(spaceList[i]); - - if (i >= (limit - num)) - spacers[i]->setVisible(false); - } +// for (int i = 0; i < (limit - 1); i++) +// { +// if (i >= (limit - num)) +// spacers[i]->setVisible(false); +// else +// spacers[i]->setVisible(false); +// } qDebug("CustomizeWidget Completed"); diff --git a/src/ChangShaTour/favoritewidget.cpp b/src/ChangShaTour/favoritewidget.cpp index b9d952a..6c0828a 100644 --- a/src/ChangShaTour/favoritewidget.cpp +++ b/src/ChangShaTour/favoritewidget.cpp @@ -183,8 +183,8 @@ void FavoriteWidget::getFavRoutesList() QStringList urlList; QStringList cateIdList; QStringList trafficList; - double * distanceList = new double[16]; - double * timeCostList = new double[16]; + int * distanceList = new int[16]; + int * timeCostList = new int[16]; QStringList descriptionList; query.prepare("select * from favPlaces where userId = ? and routeId = ? order by placeNo"); @@ -203,8 +203,8 @@ void FavoriteWidget::getFavRoutesList() QString url = query.value("url").toString(); QString cateId = query.value("cateId").toString(); QString traffic = query.value("traffic").toString(); - double distance = query.value("distance").toInt() / 1000.0; - double timeCost = query.value("timeCost").toInt() / 60.0; + int distance = query.value("distance").toInt() / 1000.0; + int timeCost = query.value("timeCost").toInt() / 60.0; QString description = query.value("description").toString(); favRoutesList[numOfFavRoutes - i].setRouteId(routeId); diff --git a/src/ChangShaTour/feedbackwidget.cpp b/src/ChangShaTour/feedbackwidget.cpp new file mode 100644 index 0000000..3ea5b97 --- /dev/null +++ b/src/ChangShaTour/feedbackwidget.cpp @@ -0,0 +1,124 @@ +#include "feedbackwidget.h" +#include "ui_feedbackwidget.h" + +FeedBackWidget::FeedBackWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::FeedBackWidget) +{ + ui->setupUi(this); + + this->setWindowModality(Qt::ApplicationModal); + this->setFixedSize(QSize(400,500)); + this->setWindowTitle("反馈"); + + QHBoxLayout * scoreHintLayout = new QHBoxLayout(); + QLabel * scoreHintLabel = new QLabel("(必填部分)\n请给这条路线打个分吧~"); + scoreHintLayout->addWidget(scoreHintLabel); + + QHBoxLayout * scoreLayout = new QHBoxLayout(); + QLabel * scoreLable = new QLabel("分数"); + scoreLineEdit = new QLineEdit(); + scoreLineEdit->setPlaceholderText("请输入一个1~5之间的整数"); + scoreLineEdit->setValidator(new QIntValidator(scoreLineEdit)); + scoreLayout->addWidget(scoreLable); + scoreLayout->addWidget(scoreLineEdit); + + QHBoxLayout * shareHintLayout = new QHBoxLayout(); + QLabel * shareHintLabel = new QLabel("(选填部分)\n填写下面的信息即可将你的行程分享给其他人哦~"); + shareHintLayout->addWidget(shareHintLabel); + + QHBoxLayout * dayLayout = new QHBoxLayout(); + QLabel * dayLabel = new QLabel("旅游天数"); + dayLineEdit = new QLineEdit(); + dayLineEdit->setPlaceholderText("请输入一个1~10之间的整数"); + dayLineEdit->setValidator(new QIntValidator(dayLineEdit)); + dayLayout->addWidget(dayLabel); + dayLayout->addWidget(dayLineEdit); + + QHBoxLayout * numberLayout = new QHBoxLayout(); + QLabel * numberLabel = new QLabel("旅游人数"); + numberLineEdit = new QLineEdit(); + numberLineEdit->setPlaceholderText("请输入一个1~8之间的整数"); + numberLineEdit->setValidator(new QIntValidator(numberLineEdit)); + numberLayout->addWidget(numberLabel); + numberLayout->addWidget(numberLineEdit); + + QHBoxLayout * budgetLayout = new QHBoxLayout(); + QLabel * budgetLabel = new QLabel("旅游花费"); + budgetLineEdit = new QLineEdit(); + budgetLineEdit->setPlaceholderText("请输入一个1~50000之间的整数"); + budgetLineEdit->setValidator(new QIntValidator(budgetLineEdit)); + budgetLayout->addWidget(budgetLabel); + budgetLayout->addWidget(budgetLineEdit); + + QHBoxLayout * preferenceLayout = new QHBoxLayout(); + QLabel * preferenceLabel = new QLabel("路线重心"); + preferenceLineEdit = new QLineEdit(); + preferenceLineEdit->setPlaceholderText("请输入一个1~6之间的整数,数字的含义如下"); + preferenceLineEdit->setValidator(new QIntValidator(preferenceLineEdit)); + preferenceLayout->addWidget(preferenceLabel); + preferenceLayout->addWidget(preferenceLineEdit); + + QHBoxLayout * preferenceHintLayout = new QHBoxLayout(); + QLabel * preferenceHintLabel = new QLabel("1:偏重自然风光 2:偏重人文风俗 3:偏重特色美食\n4:night life 5:偏重二次元 6:偏重恋人出游"); + preferenceHintLayout->addWidget(preferenceHintLabel); + + QHBoxLayout * functionButtonLayout = new QHBoxLayout(); + confirmButton = new QPushButton("确认"); + cancelButton = new QPushButton("取消"); + functionButtonLayout->addWidget(confirmButton); + functionButtonLayout->addWidget(cancelButton); + + verticalLayout = new QVBoxLayout(); + verticalLayout->addLayout(scoreHintLayout); + verticalLayout->addLayout(scoreLayout); + verticalLayout->addLayout(shareHintLayout); + verticalLayout->addLayout(dayLayout); + verticalLayout->addLayout(numberLayout); + verticalLayout->addLayout(budgetLayout); + verticalLayout->addLayout(preferenceLayout); + verticalLayout->addLayout(preferenceHintLayout); + verticalLayout->addLayout(functionButtonLayout); + + this->setLayout(verticalLayout); +} + +FeedBackWidget::~FeedBackWidget() +{ + delete ui; +} + +int FeedBackWidget::getScore() +{ + return (scoreLineEdit->text()).toInt(); +} + +int FeedBackWidget::getDay() +{ + return (dayLineEdit->text()).toInt(); +} + +int FeedBackWidget::getNumber() +{ + return (numberLineEdit->text()).toInt(); +} + +int FeedBackWidget::getBudget() +{ + return (budgetLineEdit->text()).toInt(); +} + +int FeedBackWidget::getPreference() +{ + return (preferenceLineEdit->text()).toInt(); +} + +QPushButton * FeedBackWidget::getConfirmButton() +{ + return confirmButton; +} + +QPushButton * FeedBackWidget::getCancleButton() +{ + return cancelButton; +} diff --git a/src/ChangShaTour/feedbackwidget.h b/src/ChangShaTour/feedbackwidget.h new file mode 100644 index 0000000..2dbd787 --- /dev/null +++ b/src/ChangShaTour/feedbackwidget.h @@ -0,0 +1,48 @@ +#ifndef FEEDBACKWIDGET_H +#define FEEDBACKWIDGET_H + +#include +#include +#include +#include +#include +#include + +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + +namespace Ui { +class FeedBackWidget; +} + +class FeedBackWidget : public QWidget +{ + Q_OBJECT + +public: + explicit FeedBackWidget(QWidget *parent = nullptr); + ~FeedBackWidget(); + + int getScore(); + int getDay(); + int getNumber(); + int getBudget(); + int getPreference(); + QPushButton * getConfirmButton(); + QPushButton * getCancleButton(); + +private: + Ui::FeedBackWidget *ui; + + QVBoxLayout * verticalLayout; + QLineEdit * scoreLineEdit; + QLineEdit * dayLineEdit; + QLineEdit * numberLineEdit; + QLineEdit * budgetLineEdit; + QLineEdit * preferenceLineEdit; + QPushButton * confirmButton; + QPushButton * cancelButton; +}; + +#endif // FEEDBACKWIDGET_H diff --git a/src/ChangShaTour/feedbackwidget.ui b/src/ChangShaTour/feedbackwidget.ui new file mode 100644 index 0000000..b0da9da --- /dev/null +++ b/src/ChangShaTour/feedbackwidget.ui @@ -0,0 +1,21 @@ + + + + + FeedBackWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + diff --git a/src/ChangShaTour/journywidget.cpp b/src/ChangShaTour/journywidget.cpp index 49616e6..690c5fa 100644 --- a/src/ChangShaTour/journywidget.cpp +++ b/src/ChangShaTour/journywidget.cpp @@ -11,12 +11,12 @@ JournyWidget::JournyWidget(QWidget *parent) : numOfJourney = 0; routeIdList = new int[5]; + tagList = new int[5]; journeyList = new Route[5]; getJourneyList(); setBtns(); this->setLayout(verticalLayout); - verticalLayout->setAlignment(Qt::AlignTop); } JournyWidget::~JournyWidget() @@ -37,23 +37,23 @@ void JournyWidget::getJourneyList() numOfJourney += 1; } - for(int i = numOfJourney; i > 0; i--) + for(int i = 0; i < numOfJourney; i++) { - QDateTime * startTimeList = new QDateTime[16]; - QDateTime * endTimeList = new QDateTime[16]; + QDateTime * startTimeList = new QDateTime[21]; + QDateTime * endTimeList = new QDateTime[21]; QStringList placeNameList; QStringList urlList; QStringList cateIdList; QStringList trafficList; - double * distanceList = new double[16]; - double * timeCostList = new double[16]; + int * distanceList = new int[21]; + int * timeCostList = new int[21]; QStringList descriptionList; query.prepare("select * from journey where userId = ? and routeId = ? order by placeNo"); query.addBindValue(Id); - query.addBindValue(routeIdList[i-1]); + query.addBindValue(routeIdList[i]); query.exec(); - journeyList[numOfJourney - i].setUserId(Id); + journeyList[i].setUserId(Id); int j = 0; while(query.next()) { @@ -65,12 +65,13 @@ void JournyWidget::getJourneyList() QString url = query.value("url").toString(); QString cateId = query.value("cateId").toString(); QString traffic = query.value("traffic").toString(); - double distance = query.value("distance").toInt() / 1000.0; - double timeCost = query.value("timeCost").toInt() / 60.0; + int distance = query.value("distance").toInt(); + int timeCost = query.value("timeCost").toInt(); QString description = query.value("description").toString(); + int tag = query.value("tag").toInt(); - journeyList[numOfJourney - i].setRouteId(routeId); - journeyList[numOfJourney - i].setRouteName(routeName); + journeyList[i].setRouteId(routeId); + journeyList[i].setRouteName(routeName); startTimeList[j] = startTime; endTimeList[j] = endTime; placeNameList.append(placeName); @@ -80,15 +81,19 @@ void JournyWidget::getJourneyList() distanceList[j] = distance; timeCostList[j] = timeCost; descriptionList.append(description); + tagList[i] = tag; j++; } - journeyList[numOfJourney - i].setAllItems(placeNameList, urlList, cateIdList, startTimeList, endTimeList, trafficList, distanceList, timeCostList, descriptionList); + journeyList[i].setAllItems(placeNameList, urlList, cateIdList, startTimeList, endTimeList, trafficList, distanceList, timeCostList, descriptionList); } } void JournyWidget::setBtns() { - for(int i = 0; i < numOfJourney; i++) + QPushButton ** journeyBtnList = (QPushButton **)malloc(sizeof(QPushButton *) * 5); + QPushButton ** modifyBtnList = (QPushButton **)malloc(sizeof(QPushButton *) * 5); + QPushButton ** feedBackBtnList = (QPushButton **)malloc(sizeof(QPushButton *) * 5); + for(int i = numOfJourney - 1; i >= 0; i--) { Route journey = journeyList[i]; QString routeName = journey.getRouteName(); @@ -104,8 +109,125 @@ void JournyWidget::setBtns() text += "--->"; text += head->placeName; } - QPushButton * journeyButton = new QPushButton(text); - journeyButton->setStyleSheet("QPushButton{text-align : left;}"); - verticalLayout->addWidget(journeyButton); + QHBoxLayout * horizontalLayout = new QHBoxLayout(); + + journeyBtnList[i] = new QPushButton(text); + journeyBtnList[i]->setStyleSheet("QPushButton{text-align : left;}"); + journeyBtnList[i]->setFixedSize(1000, 50); + + modifyBtnList[i] = new QPushButton("修改"); + modifyBtnList[i]->setFixedSize(200, 50); + + feedBackBtnList[i] = new QPushButton("反馈"); + feedBackBtnList[i]->setFixedSize(200, 50); + connect(feedBackBtnList[i], &QPushButton::clicked, this, [=](){setFeedBackButtons(i);}); + + horizontalLayout->addWidget(journeyBtnList[i]); + horizontalLayout->addWidget(modifyBtnList[i]); + horizontalLayout->addWidget(feedBackBtnList[i]); + verticalLayout->addLayout(horizontalLayout); + } +} + +void JournyWidget::setFeedBackButtons(int index) +{ + feedBackWidget = new FeedBackWidget(); + feedBackWidget->show(); + connect(feedBackWidget->getConfirmButton(), &QPushButton::clicked, this, [=](){confirmButtonProcessor(index);}); + connect(feedBackWidget->getCancleButton(), &QPushButton::clicked, this, [=](){feedBackWidget->close();}); +} + +void JournyWidget::confirmButtonProcessor(int index) +{ + int userScore = feedBackWidget->getScore(); + if(userScore <= 0 || userScore > 5) + { + QMessageBox::warning(NULL, "警告", "请输入合法的评分!", QMessageBox::Yes); + return; + } + + QMessageBox::information(NULL, "提示", "感谢您的反馈!", QMessageBox::Yes); + feedBackWidget->close(); + + if(!tagList[index]) + { + QSqlQuery query(routeDb); + query.prepare("select score, count from recRoutes where routeId = ? and placeNo = 1"); + query.addBindValue(routeIdList[index]); + query.exec(); + query.next(); + double score = query.value("score").toDouble(); + int count = query.value("count").toInt(); + query.prepare("update recRoutes set score = ?, count = ? where routeId = ? and placeNo = 1"); + query.addBindValue((score * count + userScore)/(count + 1)); + query.addBindValue(count + 1); + query.addBindValue(routeIdList[index]); + query.exec(); } + else + { + int day = feedBackWidget->getDay(); + int number = feedBackWidget->getNumber(); + int budget = feedBackWidget->getBudget(); + int preference = feedBackWidget->getPreference(); + if(day <= 0 || day > 10) + { + return; + } + if(number <= 0 || number > 8) + { + return; + } + if(budget <= 0 || budget > 50000) + { + return; + } + if(preference <= 0 || preference > 6) + { + return; + } + + Route customizedRoute = journeyList[index]; + int routeId = customizedRoute.getRouteId(); + QString routeName = customizedRoute.getRouteName(); + RouteItem * head = customizedRoute.getAllItems(); + int i = 0; + QSqlQuery query(routeDb); + + head = head->next; + while(head) + { + query.prepare("insert into recRoutes (routeId, routeName, placeNo, startTime, endTime, placeName, url, cateId, traffic, " + "distance, timeCost, description) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + query.addBindValue(routeId); + query.addBindValue(routeName); + query.addBindValue(i+1); + query.addBindValue(head->startTime); + query.addBindValue(head->endTime); + query.addBindValue(head->placeName); + query.addBindValue(head->url); + query.addBindValue(head->cateId); + query.addBindValue(head->traffic); + query.addBindValue(head->distance); + query.addBindValue(head->timeCost); + query.addBindValue(head->description); + query.exec(); + + head = head->next; + i++; + } + query.prepare("update recRoutes set day = ?, minNumber = ?, maxNumber = ?, minBudget = ?, maxBudget = ?, preference = ?, score = ?, count = ? where routeId = ? and placeNo = 1"); + query.addBindValue(day); + query.addBindValue(number - 1); + query.addBindValue(number + 1); + query.addBindValue(budget * 0.7); + query.addBindValue(budget * 1.3); + query.addBindValue(preference); + query.addBindValue(userScore); + query.addBindValue(1); + query.addBindValue(routeId); + query.exec(); + } + + return; } diff --git a/src/ChangShaTour/journywidget.h b/src/ChangShaTour/journywidget.h index 88c3dd2..d4f866e 100644 --- a/src/ChangShaTour/journywidget.h +++ b/src/ChangShaTour/journywidget.h @@ -7,8 +7,10 @@ #include #include #include +#include #include "cglobal.h" #include "route.h" +#include "feedbackwidget.h" #if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") @@ -28,14 +30,18 @@ public: void getJourneyList(); void setBtns(); + void setFeedBackButtons(int index); + void confirmButtonProcessor(int index); private: Ui::JournyWidget *ui; int numOfJourney; int * routeIdList; + int * tagList; Route * journeyList; QVBoxLayout * verticalLayout; + FeedBackWidget * feedBackWidget; }; #endif // JOURNYWIDGET_H diff --git a/src/ChangShaTour/modifywidget.cpp b/src/ChangShaTour/modifywidget.cpp new file mode 100644 index 0000000..3014855 --- /dev/null +++ b/src/ChangShaTour/modifywidget.cpp @@ -0,0 +1,167 @@ +#include "modifywidget.h" +#include "ui_modifywidget.h" + +ModifyWidget::ModifyWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ModifyWidget) +{ + ui->setupUi(this); + + pageIndex = 0; + + mainLayout = new QVBoxLayout(); + + funcLine = new QHBoxLayout(); + rtn = new QPushButton("返回"); + next = new QPushButton("下一步"); + +// modifyPlace = new CustomizeWidget(); +// modifyTraffic = new ConfirmWidget(); +// showInfo = new ShowRouteInfoWidget(); + + this->setLayout(mainLayout); + + mainLayout->addLayout(funcLine); +// mainLayout->addWidget(modifyPlace); +// mainLayout->addWidget(modifyTraffic); +// mainLayout->addWidget(showInfo); + + funcLine->addWidget(rtn); + funcLine->addStretch(5); + funcLine->addWidget(next); + +} + +ModifyWidget::~ModifyWidget() +{ + delete ui; +} + +void ModifyWidget::invisibleAll() +{ + modifyPlace->setVisible(false); + modifyTraffic->setVisible(false); + showInfo->setVisible(false); +} + +void ModifyWidget::InitModify(Route *route, int t) +{ + r = route; + pageIndex = 0; + tag = t; + + modifyPlace->deleteLater(); + modifyTraffic->deleteLater(); + showInfo->deleteLater(); + modifyPlace = new CustomizeWidget(); + modifyTraffic = new ConfirmWidget(); + showInfo = new ShowRouteInfoWidget(); + mainLayout->addWidget(modifyPlace); + mainLayout->addWidget(modifyTraffic); + mainLayout->addWidget(showInfo); + + modifyPlace->initInterface(r); + + invisibleAll(); + modifyPlace->setVisible(true); + + disconnect(rtn, 0, 0, 0); + disconnect(next, 0, 0, 0); + connect(rtn, &QPushButton::clicked, this, [=](){this->setVisible(false);}); + connect(next, &QPushButton::clicked, this, &ModifyWidget::switchToModifyTraffic); + +} + +void ModifyWidget::switchToModifyPlace() +{ + if (pageIndex == 1) + { + modifyTraffic->deleteLater(); + modifyTraffic = new ConfirmWidget(); + mainLayout->addWidget(modifyTraffic); + + pageIndex = 0; + + invisibleAll(); + modifyPlace->setVisible(true); + + disconnect(rtn, 0, 0, 0); + disconnect(next, 0, 0, 0); + connect(rtn, &QPushButton::clicked, this, [=](){this->deleteLater();}); + connect(next, &QPushButton::clicked, this, &ModifyWidget::switchToModifyTraffic); + + } + +} + +void ModifyWidget::switchToModifyTraffic() +{ + if (pageIndex == 2) + { + showInfo->deleteLater(); + showInfo = new ShowRouteInfoWidget(); + mainLayout->addWidget(showInfo); + + pageIndex = 1; + + invisibleAll(); + modifyTraffic->setVisible(true); + + disconnect(rtn, 0, 0, 0); + disconnect(next, 0, 0, 0); + connect(rtn, &QPushButton::clicked, this, &ModifyWidget::switchToModifyPlace); + connect(next, &QPushButton::clicked, this, &ModifyWidget::switchToShowInfo); + + } + + if (modifyPlace->genRoute()) + { + pageIndex = 1; + r = modifyPlace->getRoute(); + + modifyTraffic->setRouteToConfirm(r); + modifyTraffic->initWidget(); + + invisibleAll(); + modifyTraffic->setVisible(true); + + disconnect(rtn, 0, 0, 0); + disconnect(next, 0, 0, 0); + connect(rtn, &QPushButton::clicked, this, &ModifyWidget::switchToModifyPlace); + connect(next, &QPushButton::clicked, this, &ModifyWidget::switchToShowInfo); + + } +} + +void ModifyWidget::switchToShowInfo() +{ + + if (pageIndex == 1) + { + r = modifyTraffic->genRoute(); + if(r == NULL) + { + return ; + } + else + { + pageIndex = 2; + showInfo->setRouteToShow(r); + showInfo->initWidget(); + struct routeItem * p= r->getAllItems()->next; + while (p) + { + qDebug() << p->traffic; + p = p->next; + } + + disconnect(rtn, 0, 0, 0); + disconnect(next, 0, 0, 0); + connect(rtn, &QPushButton::clicked, this, &ModifyWidget::switchToModifyTraffic); + connect(next, &QPushButton::clicked, this, [=](){this->setVisible(false);}); + + } + + } + +} diff --git a/src/ChangShaTour/modifywidget.h b/src/ChangShaTour/modifywidget.h new file mode 100644 index 0000000..70ca0b6 --- /dev/null +++ b/src/ChangShaTour/modifywidget.h @@ -0,0 +1,55 @@ +#ifndef MODIFYWIDGET_H +#define MODIFYWIDGET_H + +#include +#include +#include +#include +#include "route.h" +#include "RouteItem.h" +#include "customizewidget.h" +#include "confirmwidget.h" +#include "showrouteinfowidget.h" + +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + +namespace Ui { +class ModifyWidget; +} + +class ModifyWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ModifyWidget(QWidget *parent = nullptr); + ~ModifyWidget(); + + void switchToModifyPlace(); + void switchToModifyTraffic(); + void switchToShowInfo(); + void InitModify(Route *route, int t); + +private: + Ui::ModifyWidget *ui; + + int pageIndex; + Route *r; + int tag; + + QVBoxLayout *mainLayout; + + QHBoxLayout *funcLine; + QPushButton *rtn; + QPushButton *next; + + CustomizeWidget *modifyPlace; + ConfirmWidget *modifyTraffic; + ShowRouteInfoWidget *showInfo; + + void invisibleAll(); +}; + +#endif // MODIFYWIDGET_H diff --git a/src/ChangShaTour/modifywidget.ui b/src/ChangShaTour/modifywidget.ui new file mode 100644 index 0000000..11d551f --- /dev/null +++ b/src/ChangShaTour/modifywidget.ui @@ -0,0 +1,21 @@ + + + + + ModifyWidget + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + diff --git a/src/ChangShaTour/planwidget.cpp b/src/ChangShaTour/planwidget.cpp index 5e8db25..a081f7e 100644 --- a/src/ChangShaTour/planwidget.cpp +++ b/src/ChangShaTour/planwidget.cpp @@ -116,17 +116,17 @@ void PlanWidget::switchToPreferenceWidget() int day = conditionWidget->getDay(); int number = conditionWidget->getNumber(); int budget = conditionWidget->getBudget(); - if(day == 0 || day > 10) + if(day <= 0 || day > 10) { QMessageBox::warning(NULL, "警告", "请输入合法的天数!", QMessageBox::Yes); return; } - if(number == 0 || number > 8) + if(number <= 0 || number > 8) { QMessageBox::warning(NULL, "警告", "请输入合法的人数!", QMessageBox::Yes); return; } - if(budget == 0 || budget > 50000) + if(budget <= 0 || budget > 50000) { QMessageBox::warning(NULL, "警告", "请输入合法的预算!", QMessageBox::Yes); return; @@ -164,7 +164,7 @@ void PlanWidget::switchToRouteChoiceWidget() { showRouteInfoWidget->deleteLater(); showRouteInfoWidget = new ShowRouteInfoWidget();//显示详情界面index为6 - verLayout->addWidget(confirmWidget); + verLayout->addWidget(showRouteInfoWidget); } if (pageIndex == 2) @@ -184,7 +184,7 @@ void PlanWidget::switchToRouteChoiceWidget() functionWidget->setVisible(true); returnBtn->setVisible(true); favoriteBtn->setVisible(false); - confirmBtn->setVisible(true); + confirmBtn->setVisible(false); choiceWidget->setVisible(false); conditionWidget->setVisible(false); preferenceWidget->setVisible(false); @@ -193,13 +193,24 @@ void PlanWidget::switchToRouteChoiceWidget() confirmWidget->setVisible(false); showRouteInfoWidget->setVisible(false); - routeChoiceWidget->setBtns(recRouteManager->getRecRoutes(), recRouteManager->getNumOfRecRoutes()); + Route ** recRoutes = recRouteManager->getRecRoutes(); + int recRouteLen = recRouteManager->getNumOfRecRoutes(); + routeChoiceWidget->setBtns(recRoutes, recRouteLen); + QPushButton ** recBtns = routeChoiceWidget->getRecBtns(); + + int i; + for(i = 0;iaddWidget(confirmWidget); } + else + { + customizeWidget->initInterface(new Route); + } pageIndex = 4; - customizeWidget->initInterface(new Route); functionWidget->setVisible(true); returnBtn->setVisible(true); @@ -397,10 +411,11 @@ void PlanWidget::InitPlanWidget() verLayout = new QVBoxLayout(); setLayout(verLayout); - verLayout->setMargin(30); + verLayout->setMargin(25); functionWidget = new QWidget(); InitFunctionWidget(); + functionWidget->setFixedHeight(50); verLayout->addWidget(functionWidget); functionWidget->setVisible(false); returnBtn->setVisible(false); @@ -436,37 +451,31 @@ void PlanWidget::InitPlanWidget() void PlanWidget::InitChoiceWidget() { - QVBoxLayout * choiceverLayout = new QVBoxLayout(); + QHBoxLayout * choiceverLayout = new QHBoxLayout(); choiceWidget->setLayout(choiceverLayout); QWidget * firstSubWidget = new QWidget(); choiceverLayout->addWidget(firstSubWidget); - QHBoxLayout * firstHoriLayout = new QHBoxLayout(); + QVBoxLayout * firstHoriLayout = new QVBoxLayout(); firstSubWidget->setLayout(firstHoriLayout); - firstSubWidget->setFixedSize(1440, 300); + //firstSubWidget->setFixedSize(1440, 300); rcmdPlanBtn = new QPushButton(); InitPlanButton(rcmdPlanBtn, "recommendRoute"); firstHoriLayout->addWidget(rcmdPlanBtn); - cstmPlanBtn = new QPushButton(); - InitPlanButton(cstmPlanBtn, "customizeRoute"); - firstHoriLayout->addWidget(cstmPlanBtn); + choiceverLayout->addStretch(); QWidget * secondSubWidget = new QWidget(); choiceverLayout->addWidget(secondSubWidget); - QHBoxLayout * secondHoriLayout = new QHBoxLayout(); + QVBoxLayout * secondHoriLayout = new QVBoxLayout(); secondSubWidget->setLayout(secondHoriLayout); - QLabel * rcmdText = new QLabel("推荐路线"); - InitLabel(rcmdText); - secondHoriLayout->addWidget(rcmdText); - - QLabel * cstmText = new QLabel("定制路线"); - InitLabel(cstmText); - secondHoriLayout->addWidget(cstmText); + cstmPlanBtn = new QPushButton(); + InitPlanButton(cstmPlanBtn, "customizeRoute"); + secondHoriLayout->addWidget(cstmPlanBtn); connect(rcmdPlanBtn, &QPushButton::clicked, this, &PlanWidget::switchToConditionWidget); connect(cstmPlanBtn, &QPushButton::clicked, this, &PlanWidget::switchToCustomizeWidget); @@ -619,27 +628,27 @@ void PlanWidget::InitPlanButton(QPushButton * button, QString url) "border-image: url(./softImages/planWidget/" + url + "Blur.jpg);" "border-style:outset;" "border-radius:10px;" - "min-width:100px;" - "min-height:20px;" - "padding:4px;" + //"min-width:100px;" + //"min-height:20px;" + //"padding:4px;" "} " "QPushButton:hover {" "border-image: url(./softImages/planWidget/" + url + ".jpg);" "border-style:outset;" "border-radius:10px;" - "min-width:100px;" - "min-height:20px;" - "padding:4px;" + //"min-width:100px;" + //"min-height:20px;" + //"padding:4px;" "} " "QPushButton:pressed {" "border-image: url(./softImages/planWidget/" + url + ".jpg);" "border-style:outset;" "border-radius:10px;" - "min-width:100px;" - "min-height:20px;" - "padding:4px;" + //"min-width:100px;" + //"min-height:20px;" + //"padding:4px;" "}"); - button->setFixedSize(500, 300); + button->setFixedSize(600, 300); } diff --git a/src/ChangShaTour/recroutemanager.cpp b/src/ChangShaTour/recroutemanager.cpp index 71306d9..d6f7895 100644 --- a/src/ChangShaTour/recroutemanager.cpp +++ b/src/ChangShaTour/recroutemanager.cpp @@ -47,7 +47,11 @@ void RecRouteManager::setPreference(int preference) void RecRouteManager::genRecRoutes() { - recRouteList = new Route[5]; + recRouteList = (Route **)malloc(sizeof (Route *) * 5); + for(int i=0;i<5;i++) + { + recRouteList[i] = new Route(); + } routeIdList = new int[5]; numOfRecRoutes = 0; QSqlQuery query(routeDb); @@ -65,6 +69,7 @@ void RecRouteManager::genRecRoutes() routeIdList[numOfRecRoutes] = query.value("routeId").toInt(); numOfRecRoutes += 1; } + qDebug()<setRouteId(routeId); + recRouteList[i]->setRouteName(routeName); startTimeList[j] = startTime; endTimeList[j] = endTime; placeNameList.append(placeName); @@ -107,9 +114,10 @@ void RecRouteManager::genRecRoutes() distanceList[j] = distance; timeCostList[j] = timeCost; descriptionList.append(description); + j++; } - recRouteList[i].setAllItems(placeNameList, urlList, cateIdList, startTimeList, endTimeList, trafficList, distanceList, timeCostList, descriptionList); + recRouteList[i]->setAllItems(placeNameList, urlList, cateIdList, startTimeList, endTimeList, trafficList, distanceList, timeCostList, descriptionList); } qDebug() << "success"; qDebug() << day; @@ -117,10 +125,10 @@ void RecRouteManager::genRecRoutes() qDebug() << budget; qDebug() << preference; qDebug() << numOfRecRoutes; - qDebug() << recRouteList[0].getRouteName(); + qDebug() << recRouteList[0]->getRouteName(); } -Route * RecRouteManager::getRecRoutes() +Route ** RecRouteManager::getRecRoutes() { return recRouteList; } diff --git a/src/ChangShaTour/recroutemanager.h b/src/ChangShaTour/recroutemanager.h index ae74320..be2c1ed 100644 --- a/src/ChangShaTour/recroutemanager.h +++ b/src/ChangShaTour/recroutemanager.h @@ -22,11 +22,11 @@ public: void setPreference(int preference); void genRecRoutes(); - Route * getRecRoutes(); + Route ** getRecRoutes(); int getNumOfRecRoutes(); private: - Route * recRouteList; + Route ** recRouteList; int * routeIdList; int numOfRecRoutes; diff --git a/src/ChangShaTour/route.cpp b/src/ChangShaTour/route.cpp index 6eefed0..b03dcad 100644 --- a/src/ChangShaTour/route.cpp +++ b/src/ChangShaTour/route.cpp @@ -42,7 +42,7 @@ void Route::setRouteId(int id) { this->routeId=id; } -void Route::setAllItems(QStringList titleList,QStringList urlList,QStringList cateIdList,QDateTime * startTimeList,QDateTime * endTimeList,QStringList trafficList,double * distanceList,double * timeCostList,QStringList descriptionList) +void Route::setAllItems(QStringList titleList,QStringList urlList,QStringList cateIdList,QDateTime * startTimeList,QDateTime * endTimeList,QStringList trafficList,int * distanceList,int * timeCostList,QStringList descriptionList) { RouteItem * head= routeItems; RouteItem * p; diff --git a/src/ChangShaTour/route.h b/src/ChangShaTour/route.h index 937665e..21ea1c0 100644 --- a/src/ChangShaTour/route.h +++ b/src/ChangShaTour/route.h @@ -9,7 +9,7 @@ public: Route(); struct routeItem * getAllItems(); //距离和时间都用int表示,单位m/km,时间s/min,统一一下 - void setAllItems(QStringList titleList,QStringList urlList,QStringList cateIdList,QDateTime * startTimeList,QDateTime * endTimeList,QStringList trafficList,double *distanceList,double *timeCostList,QStringList descriptionList); + void setAllItems(QStringList titleList,QStringList urlList,QStringList cateIdList,QDateTime * startTimeList,QDateTime * endTimeList,QStringList trafficList,int *distanceList,int *timeCostList,QStringList descriptionList); int getRouteId(); int getUserId(); QString getRouteName(); diff --git a/src/ChangShaTour/routechoicewidget.cpp b/src/ChangShaTour/routechoicewidget.cpp index 48d423e..aa15aae 100644 --- a/src/ChangShaTour/routechoicewidget.cpp +++ b/src/ChangShaTour/routechoicewidget.cpp @@ -8,15 +8,16 @@ RouteChoiceWidget::RouteChoiceWidget(QWidget *parent) : ui->setupUi(this); } -void RouteChoiceWidget::setBtns(Route * routeList, int len) +void RouteChoiceWidget::setBtns(Route ** routeList, int len) { verticalLayout = new QVBoxLayout(); this->setLayout(verticalLayout); + recRouteButtons = (QPushButton **)malloc(sizeof (QPushButton *) * len); for(int i = 0; i < len; i++) { - Route recRoute = routeList[i]; - QString routeName = recRoute.getRouteName(); - RouteItem * head = recRoute.getAllItems(); + Route * recRoute = routeList[i]; + QString routeName = recRoute->getRouteName(); + RouteItem * head = recRoute->getAllItems(); head = head->next; QString text; text += routeName; @@ -28,12 +29,17 @@ void RouteChoiceWidget::setBtns(Route * routeList, int len) text += "--->"; text += head->placeName; } - QPushButton * recRouteButton = new QPushButton(text); - recRouteButton->setStyleSheet("QPushButton{text-align : left;}"); - verticalLayout->addWidget(recRouteButton); + recRouteButtons[i] = new QPushButton(text); + recRouteButtons[i]->setStyleSheet("QPushButton{text-align : left;}"); + verticalLayout->addWidget(recRouteButtons[i]); } } +QPushButton ** RouteChoiceWidget::getRecBtns() +{ + return this->recRouteButtons; +} + RouteChoiceWidget::~RouteChoiceWidget() { delete ui; diff --git a/src/ChangShaTour/routechoicewidget.h b/src/ChangShaTour/routechoicewidget.h index 78b4627..2a6415a 100644 --- a/src/ChangShaTour/routechoicewidget.h +++ b/src/ChangShaTour/routechoicewidget.h @@ -22,12 +22,14 @@ public: explicit RouteChoiceWidget(QWidget *parent = nullptr); ~RouteChoiceWidget(); - void setBtns(Route * routeList, int len); + void setBtns(Route ** routeList, int len); + QPushButton ** getRecBtns(); private: Ui::RouteChoiceWidget *ui; QVBoxLayout * verticalLayout; + QPushButton ** recRouteButtons; }; #endif // ROUTECHOICEWIDGET_H diff --git a/src/softImages/planWidget/customizeRoute.jpg b/src/softImages/planWidget/customizeRoute.jpg index 07e7dcc..fe25f12 100644 Binary files a/src/softImages/planWidget/customizeRoute.jpg and b/src/softImages/planWidget/customizeRoute.jpg differ diff --git a/src/softImages/planWidget/customizeRouteBlur.jpg b/src/softImages/planWidget/customizeRouteBlur.jpg index 9ca11a9..757c5e0 100644 Binary files a/src/softImages/planWidget/customizeRouteBlur.jpg and b/src/softImages/planWidget/customizeRouteBlur.jpg differ diff --git a/src/softImages/planWidget/recommendRoute.jpg b/src/softImages/planWidget/recommendRoute.jpg index b898d9f..b6ab614 100644 Binary files a/src/softImages/planWidget/recommendRoute.jpg and b/src/softImages/planWidget/recommendRoute.jpg differ diff --git a/src/softImages/planWidget/recommendRouteBlur.jpg b/src/softImages/planWidget/recommendRouteBlur.jpg index cc4a179..765ed2f 100644 Binary files a/src/softImages/planWidget/recommendRouteBlur.jpg and b/src/softImages/planWidget/recommendRouteBlur.jpg differ