QString TkTime::convertMilliseconds(qint64 currentTime, qint64 totalTime) { QTime displayCurrentTime((currentTime / 3600 / 1000) % 60, (currentTime / 60 / 1000) % 60, (currentTime / 1000) % 60); QTime displayTotalTime((totalTime / 3600 / 1000) % 60, (totalTime / 60 / 1000) % 60, (totalTime / 1000) % 60); QString timeFormat; if (displayTotalTime.hour() == 0 && displayTotalTime.minute() == 0 && displayTotalTime.second() == 0 && displayTotalTime.msec() == 0) { //Total time is 0, then only return current time if (displayCurrentTime.hour() > 0) { timeFormat = "hh:mm:ss"; } else { timeFormat = "mm:ss"; } return displayCurrentTime.toString(timeFormat); } else { if (displayTotalTime.hour() > 0) { timeFormat = "hh:mm:ss"; } else { timeFormat = "mm:ss"; } return displayCurrentTime.toString(timeFormat) + " / " + displayTotalTime.toString(timeFormat); } }
//旅客选择更改,显示更改 void Widget::travelerChanged() { ui->StartButton->setEnabled(true); //当前旅客执行过构造计划,则将界面显示为该旅客的信息 if (startclicked[ui->TravelerComboBox->currentIndex()]) { qDebug() << "Change traveler to who possesses a plan, display his/her info and plan"; ui->StartDateTimeEdit->setDateTime(travelers[ui->TravelerComboBox->currentIndex()].startTime); int deaDay = travelers[ui->TravelerComboBox->currentIndex()].deadlineTime.date().day(); QDateTime deadlineDateTime; deadlineDateTime.setDate(QDate(travelers[ui->TravelerComboBox->currentIndex()].deadlineTime.date().year(), travelers[ui->TravelerComboBox->currentIndex()].deadlineTime.date().month(), deaDay)); deadlineDateTime.setTime(QTime(travelers[ui->TravelerComboBox->currentIndex()].deadlineTime.time())); ui->DeadlineDateTimeEdit->setDateTime(deadlineDateTime); ui->StrategyComboBox->setCurrentIndex(travelers[ui->TravelerComboBox->currentIndex()].strategy); ui->StartComboBox->setCurrentIndex(travelers[ui->TravelerComboBox->currentIndex()].origin); ui->DestinationComboBox->setCurrentIndex(travelers[ui->TravelerComboBox->currentIndex()].destination); displayFare(travelers[ui->TravelerComboBox->currentIndex()].getPlan()); displayTotalTime(); displayPath(travelers[ui->TravelerComboBox->currentIndex()].getPlan()); displaySpentTime(); ui->StartButton->setText(QString::fromWCharArray(L"更改")); ui->StartComboBox->setEnabled(false); ui->StartDateTimeEdit->setEnabled(false); ui->ThroughCityCheckBox->setChecked(travelers[ui->TravelerComboBox->currentIndex()].isChecked); throughcity = travelers[ui->TravelerComboBox->currentIndex()].throughCity; activeThroughCity(); currentTraveler = ui->TravelerComboBox->currentIndex(); } else { //当前旅客未执行过构造计划操作,则将界面初始化 qDebug() << "Change traveler to who possesses no plan, reset the elements in widget"; ui->StartButton->setText(QString::fromWCharArray(L"开始")); ui->StartComboBox->setEnabled(true); ui->DestinationComboBox->setEnabled(true); ui->StartDateTimeEdit->setEnabled(true); ui->DeadlineDateTimeEdit->setEnabled(true); ui->ThroughCityCheckBox->setChecked(false); throughcity = travelers[ui->TravelerComboBox->currentIndex()].throughCity; activeThroughCity(); ui->StartDateTimeEdit->setDateTime(QDateTime::currentDateTime()); int deaDay = QDateTime::currentDateTime().date().day(); deaDay += 1; QDateTime deadlineDateTime; deadlineDateTime.setDate(QDate(QDateTime::currentDateTime().date().year(), QDateTime::currentDateTime().date().month(), deaDay)); deadlineDateTime.setTime(QTime(QDateTime::currentDateTime().time())); ui->DeadlineDateTimeEdit->setDateTime(deadlineDateTime); ui->StrategyComboBox->setCurrentIndex(0); ui->StartComboBox->setCurrentIndex(0); ui->DestinationComboBox->setCurrentIndex(1); QVBoxLayout *listlayout = new QVBoxLayout; QWidget *containwidget = new QWidget(ui->PathList); containwidget->setLayout(listlayout); ui->PathList->setWidget(containwidget); ui->FareEdit->clear(); ui->TotalTimeEdit->clear(); ui->DurationText->clear(); currentTraveler = -1; } }
//单击“开始”按钮,获取用户输入信息 void Widget::startButtonClicked() { QDateTime startDateTime; //对于当前旅客,初次点击开始按钮 if (startclicked[ui->TravelerComboBox->currentIndex()] == false) { qDebug() << "StartButton clicked 1st time for CurrentTraveler"; strategy = getStrategy(); start = getStart(); destination = getDestination(); //始发地和目的地相同则弹框报错,不作操作 if (start == destination) { qDebug() << "Start and Dedtination is the same one, wait for another command"; QMessageBox::information(this, "Error", QString::fromWCharArray(L"出发地和目的地相同")); return; } //(策略三的情况下)截止时间早于当前时间报错,不作操作 if (!(ui->StartDateTimeEdit->dateTime() < ui->DeadlineDateTimeEdit->dateTime())) { qDebug() << "Deadline ahead of StratTime, wait for another command"; QMessageBox::information(this, "Error", QString::fromWCharArray(L"截止时间早于当前时间")); return; } startDateTime = getStartTime(); travelers[ui->TravelerComboBox->currentIndex()] = (Traveler(addtravelertimes-1, startDateTime, getDeadline(), strategy, start, destination, ui->ThroughCityCheckBox->isChecked(), throughcity)); std::vector<Attribute> path = travelers[ui->TravelerComboBox->currentIndex()].getPlan(); if (path.size() == 0) { qDebug() << "No legal path"; QMessageBox::information(this, "Error", QString::fromWCharArray(L"无有效路径")); startclicked[ui->TravelerComboBox->currentIndex()] = false; return; } startclicked[ui->TravelerComboBox->currentIndex()] = true; currentTraveler = ui->TravelerComboBox->currentIndex(); displayTotalTime(); displayFare(path); displayPath(path); qDebug() << "StartButton rename as ChangePlan for CurrentTraveler"; ui->StartButton->setText(QString::fromWCharArray(L"更改")); ui->StartComboBox->setEnabled(false); ui->StartDateTimeEdit->setEnabled(false); startclickedtimes += 1; startclicked[ui->TravelerComboBox->currentIndex()] = true; return; } //对于当前旅客,执行更改计划操作 if (startclicked[ui->TravelerComboBox->currentIndex()] == true) { qDebug() << "StartButton clicked for CurrentTraveler"; strategy = getStrategy(); destination = getDestination(); if (!(ui->StartDateTimeEdit->dateTime() < ui->DeadlineDateTimeEdit->dateTime())) { qDebug() << "Deadline ahead of StartTime, reset the DeadlineDateTimeEdit,wait for another command"; QMessageBox::information(this, "Error", QString::fromWCharArray(L"截止时间早于当前时间")); int deaDay = ui->StartDateTimeEdit->dateTime().date().day(); deaDay += 1; QDateTime deadlineDateTime; deadlineDateTime.setDate(QDate(ui->StartDateTimeEdit->dateTime().date().year(), ui->StartDateTimeEdit->dateTime().date().month(), deaDay)); deadlineDateTime.setTime(QTime(ui->StartDateTimeEdit->dateTime().time())); ui->DeadlineDateTimeEdit->setDateTime(deadlineDateTime); return; } //获得新计划的始发地,即原计划的当前停留地/运行途中即将到达地 int nextCity2Arrive = ui->LeftWidget->nextCity(); if (nextCity2Arrive != -1) { std::vector<Attribute> path = travelers[ui->TravelerComboBox->currentIndex()].changePlan(nextCity2Arrive, strategy, destination, getDeadline(), ui->ThroughCityCheckBox->isChecked(),throughcity); if (path.size() == 0) { qDebug() << "No legal path"; QMessageBox::information(this, "Error", QString::fromWCharArray(L"无有效路径")); return; } qDebug() << "Change plan success."; currentTraveler = ui->TravelerComboBox->currentIndex(); displayTotalTime(); displayFare(path); displayPath(path); } } }