Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "dialog.h"
- #include "ui_dialog.h"
- #include <QHBoxLayout>
- #include <QPushButton>
- #include <QCompleter>
- #include <QDateTimeEdit>
- #include <QTime>
- #include <QTextStream>
- #include <QFile>
- #include <iostream>
- Dialog::Dialog(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::Dialog)
- {
- ui->setupUi(this);
- ui->tableWidget->setColumnWidth(0, 120);
- ui->tableWidget->setColumnWidth(1, 120);
- ui->tableWidget->setColumnWidth(2, 160);
- ui->tableWidget->setColumnWidth(3, 160);
- ui->tableWidget->setColumnWidth(4, 170);
- Cities.clear();
- ui->buttonBox->setEnabled(false);
- duplicate = "";
- QStringList L;
- db = QSqlDatabase::addDatabase("QSQLITE");
- db.setDatabaseName("C:\\SQLiteDatabaseBrowserPortable\\Data\\cities.db");
- db.open();
- QSqlQuery query;
- query.exec("SELECT city FROM distance_between_cities");
- while(query.next())
- {
- L<<query.value(0).toString();
- }
- // db.close();
- StringCompleter = new QCompleter(L,this);
- StringCompleter->setCaseSensitivity(Qt::CaseInsensitive);
- AddRow();
- }
- QString Dialog::get_time(int row,int col)
- {
- QDateTimeEdit *s = ui->tableWidget->cellWidget(row,col)->findChild<QDateTimeEdit*>();
- QDateTime datetime2 = s->dateTime(); //prints QDateTimeEdit to textEdit
- QString timeDateString = datetime2.toString(s->displayFormat());
- return timeDateString;
- }
- QString Dialog::get_city(int row)
- {
- QLineEdit *l = ui->tableWidget->cellWidget(row,2)->findChild<QLineEdit*>();
- return l->text();
- }
- /// seconds as "X days, X hours, X minutes, X seconds" string
- QString secondsToString(qint64 seconds)
- {
- const qint64 DAY = 86400;
- qint64 days = seconds / DAY;
- QTime t = QTime(0,0).addSecs(seconds % DAY);
- return QString("%1 days, %2 hours, %3 minutes, %4 seconds")
- .arg(days).arg(t.hour()).arg(t.minute()).arg(t.second());
- }
- bool Dialog::cities_is_filled()
- {
- for(int row = 0; row<ui->tableWidget->rowCount();row++)
- {
- QLineEdit *l = ui->tableWidget->cellWidget(row,2)->findChild<QLineEdit*>();
- if(!true_city(l))
- {
- return false;
- }
- }
- return true;
- }
- bool Dialog::true_city(QLineEdit *s)
- {
- // QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
- // db.setDatabaseName("C:\\SQLiteDatabaseBrowserPortable\\Data\\cities.db");
- // db.open();
- QSqlQuery query;
- query.exec("SELECT city FROM distance_between_cities WHERE city = '"+s->text()+"'");
- if(query.next())
- {
- //db.close();
- return true;
- }
- return false;
- }
- void Dialog::DBsearching(const QString & s)
- {
- if(ui->tableWidget->rowCount() < 2)
- {
- ui->buttonBox->setEnabled(false);
- return;
- }
- for(int row = 0; row<ui->tableWidget->rowCount();row++)
- {
- QLineEdit *l = ui->tableWidget->cellWidget(row,2)->findChild<QLineEdit*>();//перевірка чи правильно заповнені поля
- if(!true_city(l))
- {
- ui->buttonBox->setEnabled(false);
- return;
- }
- }
- for(int row = 0; row<ui->tableWidget->rowCount()-1;row++)
- {
- QLineEdit *first = ui->tableWidget->cellWidget(row,2)->findChild<QLineEdit*>();
- for(int row_2 = row+1; row_2<ui->tableWidget->rowCount();row_2++)
- {
- QLineEdit *second = ui->tableWidget->cellWidget(row_2,2)->findChild<QLineEdit*>();//перевірка чи правильно заповнені поля
- if(first->text() == second->text())
- {
- ui->buttonBox->setEnabled(false);
- return;
- }
- }
- }
- ui->buttonBox->setEnabled(true);
- return;
- }
- void Dialog::RemoveRow()
- {
- QWidget *w = qobject_cast<QWidget *>(sender()->parent());
- if(w){
- if(ui->tableWidget->rowCount()>1)
- {
- int row = ui->tableWidget->indexAt(w->pos()).row();
- ui->lineEdit->setText(QString::number( row ));
- ui->tableWidget->removeRow(row);
- ui->tableWidget->setCurrentCell(0, 0);
- }
- }
- }
- void Dialog::AddRow()
- {
- /* QSqlDatabase dl;
- QStringList L;
- L<<"jOHN"<<"sAM"<<"Smith"<<"Arr"<<"ABB"<<"C";
- QCompleter *StringCompleter = new QCompleter(L,this);
- StringCompleter->setCaseSensitivity(Qt::CaseInsensitive);*/
- if(ui->tableWidget->rowCount() == 0 || true_city(ui->tableWidget->cellWidget(ui->tableWidget->rowCount()-1,2)->findChild<QLineEdit*>()))
- {
- ui->tableWidget->insertRow(ui->tableWidget->rowCount());
- for(int i = 0; i<ui->tableWidget->columnCount(); i++)
- {
- if(i==0)
- {
- QWidget* pWidget = new QWidget(this);
- QPushButton* btn_edit = new QPushButton();
- btn_edit->setText("Remove");
- connect(btn_edit, &QPushButton::clicked, this, &Dialog::RemoveRow);
- QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
- pLayout->addWidget(btn_edit);
- pLayout->setAlignment(Qt::AlignCenter);
- pLayout->setContentsMargins(0, 0, 0, 0);
- pWidget->setLayout(pLayout);
- ui->tableWidget->setCellWidget(ui->tableWidget->rowCount()-1, i, pWidget);
- continue;
- }
- if(i == 1)
- {
- QWidget* pWidget = new QWidget(this);
- QPushButton* btn_edit = new QPushButton();
- btn_edit->setText("Add");
- connect(btn_edit, &QPushButton::clicked, this, &Dialog::Add);
- QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
- pLayout->addWidget(btn_edit);
- pLayout->setAlignment(Qt::AlignCenter);
- pLayout->setContentsMargins(0, 0, 0, 0);
- pWidget->setLayout(pLayout);
- ui->tableWidget->setCellWidget(ui->tableWidget->rowCount()-1, i, pWidget);
- continue;
- }
- if(i==2)// I CREATE LINEEDIT IN TABLEWIDGET HERE
- {
- QWidget* pWidget = new QWidget(this);
- QLineEdit *line = new QLineEdit();
- line->setPlaceholderText("city name");
- line->setCompleter(StringCompleter);
- connect(line, SIGNAL(textChanged(const QString &)), this, SLOT(DBsearching(const QString &)));
- QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
- pLayout->addWidget(line);
- pLayout->setAlignment(Qt::AlignCenter);
- pLayout->setContentsMargins(0, 0, 0, 0);
- pWidget->setLayout(pLayout);
- ui->tableWidget->setCellWidget(ui->tableWidget->rowCount()-1, i, pWidget);
- }
- if(i == 3)
- {
- QWidget* pWidget = new QWidget(this);
- QDateTimeEdit *line = new QDateTimeEdit();
- line->setDisplayFormat("yyyy-MM-dd HH:mm");
- line->setDate(QDate::currentDate());
- line->setTime(QTime::currentTime());
- QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
- pLayout->addWidget(line);
- pLayout->setAlignment(Qt::AlignCenter);
- pLayout->setContentsMargins(0, 0, 0, 0);
- pWidget->setLayout(pLayout);
- ui->tableWidget->setCellWidget(ui->tableWidget->rowCount()-1, i, pWidget);
- }
- if(i==4)
- {
- QWidget* pWidget = new QWidget(this);
- QDateTimeEdit *line = new QDateTimeEdit();
- line->setDisplayFormat("yyyy-MM-dd HH:mm");
- line->setDate(QDate::currentDate());
- line->setTime(QTime::currentTime());
- QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
- pLayout->addWidget(line);
- pLayout->setAlignment(Qt::AlignCenter);
- pLayout->setContentsMargins(0, 0, 0, 0);
- pWidget->setLayout(pLayout);
- ui->tableWidget->setCellWidget(ui->tableWidget->rowCount()-1, i, pWidget);
- }
- }
- }
- }
- void Dialog::Add()
- {
- QLineEdit *l = ui->tableWidget->cellWidget(0,2)->findChild<QLineEdit*>();
- ui->lineEdit->setText(l->text());
- QDateTimeEdit *s = ui->tableWidget->cellWidget(0,3)->findChild<QDateTimeEdit*>();
- QDateTime datetime2 = s->dateTime(); //prints QDateTimeEdit to textEdit
- QString timeDateString = datetime2.toString(s->displayFormat());
- ui->lineEdit->setText(timeDateString);
- /* QString format = "yyyy-MM-dd HH:mm:ss";
- QDateTime a = QDateTime::fromString("2013-06-13 11:00:45", format);//час в дорозі
- QDateTime b = QDateTime::fromString("2013-06-14 09:03:23", format);
- ui->lineEdit->setText(secondsToString(a.secsTo(b)));*/
- //qDebug() << secondsToString(a.secsTo(b));
- /*int year = datetime2.date().year();
- int month = datetime2.date().month();
- int day = datetime2.date().day();*/
- // QString timeDateString = datetime2.toString(s->displayFormat());
- // ui->lineEdit->setText(QString::number(month) +" "+ QString::number(day) +" " + QString::number(year));
- // QTableWidgetItem* w = ui->tableWidget->item(0,2);
- // QString s = w->text();
- // QHBoxLayout *l = qobject_cast<QHBoxLayout*>(w);
- //QLineEdit *l = qobject_cast<QLineEdit*>(w);
- // ui->lineEdit->setText(l->text());
- // QLineEdit*l = qobject_cast<QLineEdit*>(ui->tableWidget->cellWidget(0,2)); it should
- // be a code for getting qlineedit value
- // QHBoxLayout* tmpLineEdit = new QHBoxLayout();
- // tmpLineEdit->addWidget(ui->tableWidget->item(0,2));
- // auto p = ui->tableWidget->item(0,2);
- // ui->lineEdit->setText(p->text());
- // qobject_cast<QLayout*>(ui->tableWidget->item(0,2));
- /*if(tmpLineEdit == nullptr)
- {
- ui->lineEdit->setText("error");
- }
- else
- ui->lineEdit->setText("egewg");
- // ui->lineEdit->setText(l->text());
- /*QString StringItem; My trying to get value of qlineedit
- QTableWidgetItem *pToItem;
- pToItem = ui->tableWidget->item(0,2);
- StringItem=pToItem->text();
- ui->lineEdit->setText(StringItem);*/
- AddRow();//
- ui->buttonBox->setEnabled(false);
- }
- void Dialog::onClicked()
- {
- QWidget *w = qobject_cast<QWidget *>(sender()->parent());
- if(w){
- int row = ui->tableWidget->indexAt(w->pos()).column();
- ui->lineEdit->setText(QString::number( row ));
- // ui->tableWidget->removeRow(row);
- ui->tableWidget->setCurrentCell(0, 0);
- }
- }
- Dialog::~Dialog()
- {
- delete ui;
- }
- QString Dialog::get_population(QString &city)
- {
- QSqlQuery query;
- query.exec("SELECT population FROM distance_between_cities WHERE city = '"+city+"'");
- if(query.next())
- {
- QString population = query.value(0).toString();
- return population;
- }
- return "";
- }
- int Dialog::get_distance_to_previous(vector<cities>&s,int position)
- {
- QSqlQuery query;
- query.exec("SELECT distance_to_another_city FROM distance_between_cities WHERE city = '" +s[position].city_+ "'");
- while(query.next())
- {
- QStringList strList = query.value(0).toString().split(QRegExp("\n"),QString::SkipEmptyParts);
- for(int i=0; i<strList.length(); i++)
- {
- QStringList strList1 = strList[i].split(QRegExp(":"),QString::SkipEmptyParts);
- if(strList1[0] == s[position-1].city_)
- {
- return strList1[1].toInt();
- }
- }
- }
- }
- void Dialog::on_buttonBox_accepted()//дописати функцію порівняння чи всі поля міст різні
- {
- if(cities_is_filled())
- {
- // Cities.clear();
- for(int row = 0; row<ui->tableWidget->rowCount(); row++)
- {
- cities s(get_city(row),get_time(row,3),get_time(row,4));
- Cities.push_back(s);
- }
- QString s = "";
- for(int i = 0; i<Cities.size();i++)
- {
- if(Cities[i].city_ == "Bila Tserkva")// 0 == " "
- {
- if(i == Cities.size()-1)
- {
- s += "Bila0Tserkva";
- continue;
- }
- else
- {
- s += "Bila0Tserkva_";
- continue;
- }
- continue;
- }
- if( Cities[i].city_ == "Kryvyi Rih")
- {
- if(i == Cities.size()-1)
- {
- s += "Kryvyi0Rih";
- continue;
- }
- else
- {
- s += "Kryvyi0Rih_";
- continue;
- }
- continue;
- }
- if(Cities[i].city_ == "Ivano-Frankivsk")// 1 == -
- {
- if(i == Cities.size()-1)
- {
- s += "Ivano1Frankivsk";
- continue;
- }
- else
- {
- s += "Ivano1Frankivsk_";
- continue;
- }
- continue;
- }
- if(i==0)
- {
- s += Cities[0].city_ + "_";
- }
- else if(i==Cities.size()-1)
- { s += Cities[Cities.size()-1].city_;}
- else
- {
- s += Cities[i].city_ + "_";
- }
- }
- // QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
- // db.setDatabaseName("C:\\SQLiteDatabaseBrowserPortable\\Data\\cities.db");
- // db.open();
- QSqlQuery query;
- //таблиця міст через які їхатиме поїзд
- train_name = s;
- query.exec("create table "+s+" "
- "(id integer primary key, "
- "city varchar(30), "
- "arrival_time varchar(30), "
- "depart_time varchar(30), "
- "distance_to_previous varchar(5),"
- "population varchar(8))"
- );//таблиця міст через які йде поїзд
- for(int i = 0; i<Cities.size();i++)//ініціалізація зупинок поїзда місто-час приїзду-час відїзду-населення міста відстань до сусідніх міст
- {
- if(i == 0)
- {
- QString num = "0";
- query.exec("INSERT INTO " +s+"(city,arrival_time,depart_time,distance_to_previous,population)"
- +"values('"+Cities[i].city_+"','"+Cities[i].depart_+"','"+Cities[i].leave_+"','"
- +num+"','"+get_population(Cities[i].city_)+"')");
- }
- else
- {
- QString number_ = QString::number(get_distance_to_previous(Cities,i));
- query.exec("INSERT INTO " +s+"(city,arrival_time,depart_time,distance_to_previous,population)"
- +"values('"+Cities[i].city_+"','"+Cities[i].depart_+"','"+Cities[i].leave_+"','"
- +number_+"','"+get_population(Cities[i].city_)+"')");
- }
- }
- //створення таблиці з пасажирами нового маршруту
- s += "_people";
- if(query.exec("create table "+s+" "
- "(id integer primary key, "
- "depart_city varchar(30), "
- "arrival_city varchar(30), "
- "firstname varchar(30), "
- "lastname varchar(30), "
- "bot varchar(10),"
- "vagon integer,"
- "place integer,"
- "privileges varchar(5), "
- "distance integer, "
- "ticket_price integer)"))
- {
- // Add new train
- /* QString filename="Data.txt";
- QFile file( filename );
- if ( file.open(QIODevice::Append|QIODevice::Text) )
- {
- QTextStream stream( &file );
- stream << s<<'\n';
- }*/
- // file.close();
- db.close();
- }
- else
- {
- duplicate = "the train is in data base";
- db.close();
- }
- //dialog is closed
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement