Advertisement
Guest User

Untitled

a guest
Nov 13th, 2017
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "dialog.h"
  2. #include "ui_dialog.h"
  3. #include <QHBoxLayout>
  4. #include <QPushButton>
  5. #include <QCompleter>
  6. #include <QDateTimeEdit>
  7. #include <QTime>
  8. #include <QTextStream>
  9. #include <QFile>
  10. #include <iostream>
  11. Dialog::Dialog(QWidget *parent) :
  12.     QDialog(parent),
  13.     ui(new Ui::Dialog)
  14. {
  15.     ui->setupUi(this);
  16.     ui->tableWidget->setColumnWidth(0, 120);
  17.     ui->tableWidget->setColumnWidth(1, 120);
  18.     ui->tableWidget->setColumnWidth(2, 160);
  19.     ui->tableWidget->setColumnWidth(3, 160);
  20.     ui->tableWidget->setColumnWidth(4, 170);
  21.          Cities.clear();
  22.      ui->buttonBox->setEnabled(false);
  23.     duplicate = "";
  24.     QStringList L;
  25.     db = QSqlDatabase::addDatabase("QSQLITE");
  26.     db.setDatabaseName("C:\\SQLiteDatabaseBrowserPortable\\Data\\cities.db");
  27.     db.open();
  28.      QSqlQuery query;
  29.     query.exec("SELECT city FROM distance_between_cities");
  30.     while(query.next())
  31.     {
  32.         L<<query.value(0).toString();
  33.     }
  34. //    db.close();
  35.     StringCompleter = new QCompleter(L,this);
  36.     StringCompleter->setCaseSensitivity(Qt::CaseInsensitive);
  37.  
  38.     AddRow();
  39. }
  40. QString Dialog::get_time(int row,int col)
  41. {
  42.     QDateTimeEdit *s = ui->tableWidget->cellWidget(row,col)->findChild<QDateTimeEdit*>();
  43.  
  44.     QDateTime datetime2 = s->dateTime(); //prints QDateTimeEdit to textEdit
  45.  
  46.     QString timeDateString = datetime2.toString(s->displayFormat());
  47.     return timeDateString;
  48. }
  49. QString Dialog::get_city(int row)
  50. {
  51.     QLineEdit *l = ui->tableWidget->cellWidget(row,2)->findChild<QLineEdit*>();
  52.     return l->text();
  53. }
  54. /// seconds as "X days, X hours, X minutes, X seconds" string
  55. QString secondsToString(qint64 seconds)
  56. {
  57.   const qint64 DAY = 86400;
  58.   qint64 days = seconds / DAY;
  59.   QTime t = QTime(0,0).addSecs(seconds % DAY);
  60.   return QString("%1 days, %2 hours, %3 minutes, %4 seconds")
  61.     .arg(days).arg(t.hour()).arg(t.minute()).arg(t.second());
  62. }
  63. bool Dialog::cities_is_filled()
  64. {
  65.    for(int row = 0; row<ui->tableWidget->rowCount();row++)
  66.    {
  67.        QLineEdit *l = ui->tableWidget->cellWidget(row,2)->findChild<QLineEdit*>();
  68.        if(!true_city(l))
  69.        {
  70.            return false;
  71.        }
  72.    }
  73.    return true;
  74. }
  75.  bool Dialog::true_city(QLineEdit *s)
  76.  {
  77.     // QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
  78.    //  db.setDatabaseName("C:\\SQLiteDatabaseBrowserPortable\\Data\\cities.db");
  79.    //  db.open();
  80.       QSqlQuery query;
  81.      query.exec("SELECT city FROM distance_between_cities WHERE city = '"+s->text()+"'");
  82.      if(query.next())
  83.      {
  84.          //db.close();
  85.          return true;
  86.      }
  87.      return false;
  88.  }
  89. void Dialog::DBsearching(const QString & s)
  90. {
  91.     if(ui->tableWidget->rowCount() < 2)
  92.     {
  93.         ui->buttonBox->setEnabled(false);
  94.        return;
  95.     }
  96.     for(int row = 0; row<ui->tableWidget->rowCount();row++)
  97.     {
  98.         QLineEdit *l = ui->tableWidget->cellWidget(row,2)->findChild<QLineEdit*>();//перевірка чи правильно заповнені поля
  99.         if(!true_city(l))
  100.         {
  101.              ui->buttonBox->setEnabled(false);
  102.             return;
  103.         }
  104.     }
  105.  
  106.     for(int row = 0; row<ui->tableWidget->rowCount()-1;row++)
  107.     {
  108.          QLineEdit *first = ui->tableWidget->cellWidget(row,2)->findChild<QLineEdit*>();
  109.         for(int row_2 = row+1; row_2<ui->tableWidget->rowCount();row_2++)
  110.         {
  111.             QLineEdit *second = ui->tableWidget->cellWidget(row_2,2)->findChild<QLineEdit*>();//перевірка чи правильно заповнені поля
  112.             if(first->text() == second->text())
  113.             {
  114.                  ui->buttonBox->setEnabled(false);
  115.                 return;
  116.             }
  117.         }
  118.     }
  119.  
  120.      ui->buttonBox->setEnabled(true);
  121.     return;
  122. }
  123. void Dialog::RemoveRow()
  124. {
  125.     QWidget *w = qobject_cast<QWidget *>(sender()->parent());
  126.     if(w){
  127.         if(ui->tableWidget->rowCount()>1)
  128.         {
  129.         int row = ui->tableWidget->indexAt(w->pos()).row();
  130.         ui->lineEdit->setText(QString::number( row ));
  131.         ui->tableWidget->removeRow(row);
  132.         ui->tableWidget->setCurrentCell(0, 0);
  133.         }
  134.     }
  135. }
  136. void Dialog::AddRow()
  137. {
  138.  /*   QSqlDatabase dl;
  139.     QStringList L;
  140.     L<<"jOHN"<<"sAM"<<"Smith"<<"Arr"<<"ABB"<<"C";
  141.     QCompleter *StringCompleter = new QCompleter(L,this);
  142.     StringCompleter->setCaseSensitivity(Qt::CaseInsensitive);*/
  143.     if(ui->tableWidget->rowCount() == 0 || true_city(ui->tableWidget->cellWidget(ui->tableWidget->rowCount()-1,2)->findChild<QLineEdit*>()))
  144.     {
  145.         ui->tableWidget->insertRow(ui->tableWidget->rowCount());
  146.         for(int i = 0; i<ui->tableWidget->columnCount(); i++)
  147.         {
  148.             if(i==0)
  149.             {
  150.                 QWidget* pWidget = new QWidget(this);
  151.                 QPushButton* btn_edit = new QPushButton();
  152.                 btn_edit->setText("Remove");
  153.                 connect(btn_edit, &QPushButton::clicked, this, &Dialog::RemoveRow);
  154.                 QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
  155.                 pLayout->addWidget(btn_edit);
  156.                 pLayout->setAlignment(Qt::AlignCenter);
  157.                 pLayout->setContentsMargins(0, 0, 0, 0);
  158.                 pWidget->setLayout(pLayout);
  159.                 ui->tableWidget->setCellWidget(ui->tableWidget->rowCount()-1, i, pWidget);
  160.                 continue;
  161.             }
  162.             if(i == 1)
  163.             {
  164.                 QWidget* pWidget = new QWidget(this);
  165.                 QPushButton* btn_edit = new QPushButton();
  166.                 btn_edit->setText("Add");
  167.                 connect(btn_edit, &QPushButton::clicked, this, &Dialog::Add);
  168.                 QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
  169.                 pLayout->addWidget(btn_edit);
  170.                 pLayout->setAlignment(Qt::AlignCenter);
  171.                 pLayout->setContentsMargins(0, 0, 0, 0);
  172.                 pWidget->setLayout(pLayout);
  173.                 ui->tableWidget->setCellWidget(ui->tableWidget->rowCount()-1, i, pWidget);
  174.                 continue;
  175.             }
  176.             if(i==2)// I CREATE LINEEDIT IN TABLEWIDGET HERE
  177.             {
  178.                QWidget* pWidget = new QWidget(this);
  179.                QLineEdit *line = new QLineEdit();
  180.                line->setPlaceholderText("city name");
  181.                line->setCompleter(StringCompleter);
  182.                 connect(line, SIGNAL(textChanged(const QString &)), this, SLOT(DBsearching(const QString &)));
  183.                QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
  184.                pLayout->addWidget(line);
  185.                pLayout->setAlignment(Qt::AlignCenter);
  186.                pLayout->setContentsMargins(0, 0, 0, 0);
  187.                pWidget->setLayout(pLayout);
  188.                ui->tableWidget->setCellWidget(ui->tableWidget->rowCount()-1, i, pWidget);
  189.             }
  190.             if(i == 3)
  191.             {
  192.                 QWidget* pWidget = new QWidget(this);
  193.                 QDateTimeEdit *line = new QDateTimeEdit();
  194.                 line->setDisplayFormat("yyyy-MM-dd HH:mm");
  195.                 line->setDate(QDate::currentDate());
  196.                 line->setTime(QTime::currentTime());
  197.                 QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
  198.                 pLayout->addWidget(line);
  199.                 pLayout->setAlignment(Qt::AlignCenter);
  200.                 pLayout->setContentsMargins(0, 0, 0, 0);
  201.                 pWidget->setLayout(pLayout);
  202.                 ui->tableWidget->setCellWidget(ui->tableWidget->rowCount()-1, i, pWidget);
  203.             }
  204.             if(i==4)
  205.             {
  206.                 QWidget* pWidget = new QWidget(this);
  207.                 QDateTimeEdit *line = new QDateTimeEdit();
  208.                 line->setDisplayFormat("yyyy-MM-dd HH:mm");
  209.                 line->setDate(QDate::currentDate());
  210.                 line->setTime(QTime::currentTime());
  211.                 QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
  212.                 pLayout->addWidget(line);
  213.                 pLayout->setAlignment(Qt::AlignCenter);
  214.                 pLayout->setContentsMargins(0, 0, 0, 0);
  215.                 pWidget->setLayout(pLayout);
  216.                 ui->tableWidget->setCellWidget(ui->tableWidget->rowCount()-1, i, pWidget);
  217.             }
  218.         }
  219.     }
  220. }
  221. void Dialog::Add()
  222. {
  223.     QLineEdit *l = ui->tableWidget->cellWidget(0,2)->findChild<QLineEdit*>();
  224.     ui->lineEdit->setText(l->text());
  225.  
  226.     QDateTimeEdit *s = ui->tableWidget->cellWidget(0,3)->findChild<QDateTimeEdit*>();
  227.  
  228.     QDateTime datetime2 = s->dateTime(); //prints QDateTimeEdit to textEdit
  229.  
  230.     QString timeDateString = datetime2.toString(s->displayFormat());
  231.     ui->lineEdit->setText(timeDateString);
  232.   /*  QString format = "yyyy-MM-dd HH:mm:ss";
  233.      QDateTime a = QDateTime::fromString("2013-06-13 11:00:45", format);//час в дорозі
  234.      QDateTime b = QDateTime::fromString("2013-06-14 09:03:23", format);
  235.     ui->lineEdit->setText(secondsToString(a.secsTo(b)));*/
  236.  
  237.      //qDebug() << secondsToString(a.secsTo(b));
  238.     /*int year = datetime2.date().year();
  239.     int month = datetime2.date().month();
  240.     int day = datetime2.date().day();*/
  241.   //  QString timeDateString = datetime2.toString(s->displayFormat());
  242.  
  243.    //  ui->lineEdit->setText(QString::number(month) +"  "+ QString::number(day) +" " + QString::number(year));
  244.   //  QTableWidgetItem* w = ui->tableWidget->item(0,2);
  245.  
  246.   // QString s =  w->text();
  247.   //  QHBoxLayout *l = qobject_cast<QHBoxLayout*>(w);
  248.     //QLineEdit *l =  qobject_cast<QLineEdit*>(w);
  249.    // ui->lineEdit->setText(l->text());
  250.   // QLineEdit*l = qobject_cast<QLineEdit*>(ui->tableWidget->cellWidget(0,2)); it should
  251.  //   be a code for getting qlineedit value
  252.  
  253.   //  QHBoxLayout* tmpLineEdit = new QHBoxLayout();
  254.   //  tmpLineEdit->addWidget(ui->tableWidget->item(0,2));
  255.  //   auto p = ui->tableWidget->item(0,2);
  256.    // ui->lineEdit->setText(p->text());
  257.   //          qobject_cast<QLayout*>(ui->tableWidget->item(0,2));
  258.    /*if(tmpLineEdit == nullptr)
  259.    {
  260.        ui->lineEdit->setText("error");
  261.    }
  262.    else
  263.          ui->lineEdit->setText("egewg");
  264.  //   ui->lineEdit->setText(l->text());
  265.  
  266.     /*QString StringItem;  My trying to get value of qlineedit
  267.         QTableWidgetItem *pToItem;
  268.          pToItem  = ui->tableWidget->item(0,2);
  269.         StringItem=pToItem->text();
  270.         ui->lineEdit->setText(StringItem);*/
  271.     AddRow();//
  272.     ui->buttonBox->setEnabled(false);
  273. }
  274. void Dialog::onClicked()
  275. {
  276.     QWidget *w = qobject_cast<QWidget *>(sender()->parent());
  277.     if(w){
  278.         int row = ui->tableWidget->indexAt(w->pos()).column();
  279.         ui->lineEdit->setText(QString::number( row ));
  280.      //   ui->tableWidget->removeRow(row);
  281.         ui->tableWidget->setCurrentCell(0, 0);
  282.     }
  283. }
  284.  
  285. Dialog::~Dialog()
  286. {
  287.     delete ui;
  288. }
  289.  
  290. QString Dialog::get_population(QString &city)
  291. {
  292.     QSqlQuery query;
  293.  
  294.    query.exec("SELECT population FROM distance_between_cities WHERE city = '"+city+"'");
  295.    if(query.next())
  296.     {
  297.          QString population = query.value(0).toString();
  298.         return population;
  299.     }
  300.     return "";
  301. }
  302. int Dialog::get_distance_to_previous(vector<cities>&s,int position)
  303. {
  304.      QSqlQuery query;
  305.     query.exec("SELECT distance_to_another_city FROM distance_between_cities WHERE city = '" +s[position].city_+ "'");
  306.     while(query.next())
  307.     {
  308.         QStringList strList = query.value(0).toString().split(QRegExp("\n"),QString::SkipEmptyParts);
  309.         for(int i=0; i<strList.length(); i++)
  310.         {
  311.             QStringList strList1 = strList[i].split(QRegExp(":"),QString::SkipEmptyParts);
  312.             if(strList1[0] == s[position-1].city_)
  313.             {
  314.                 return strList1[1].toInt();
  315.             }
  316.         }
  317.     }
  318. }
  319.  
  320.  
  321. void Dialog::on_buttonBox_accepted()//дописати функцію порівняння чи всі поля міст різні
  322. {
  323.     if(cities_is_filled())
  324.     {
  325.        //  Cities.clear();
  326.          for(int row = 0; row<ui->tableWidget->rowCount(); row++)
  327.          {
  328.              cities s(get_city(row),get_time(row,3),get_time(row,4));
  329.              Cities.push_back(s);
  330.          }
  331.  
  332.  
  333.          QString s = "";
  334.          for(int i = 0; i<Cities.size();i++)
  335.          {
  336.              if(Cities[i].city_ == "Bila Tserkva")// 0 == " "
  337.              {
  338.                  if(i == Cities.size()-1)
  339.                  {
  340.                      s +=  "Bila0Tserkva";
  341.                      continue;
  342.                  }
  343.                  else
  344.                  {
  345.                      s +=  "Bila0Tserkva_";
  346.                      continue;
  347.                  }
  348.                  continue;
  349.              }
  350.              if( Cities[i].city_ == "Kryvyi Rih")
  351.              {
  352.                  if(i == Cities.size()-1)
  353.                  {
  354.                      s +=  "Kryvyi0Rih";
  355.                      continue;
  356.                  }
  357.                  else
  358.                  {
  359.                      s +=  "Kryvyi0Rih_";
  360.                      continue;
  361.                  }
  362.                  continue;
  363.              }
  364.              if(Cities[i].city_ == "Ivano-Frankivsk")// 1 == -
  365.              {
  366.                  if(i == Cities.size()-1)
  367.                  {
  368.                      s +=  "Ivano1Frankivsk";
  369.                      continue;
  370.                  }
  371.                  else
  372.                  {
  373.                      s +=  "Ivano1Frankivsk_";
  374.                      continue;
  375.                  }
  376.                  continue;
  377.              }
  378.              if(i==0)
  379.              {
  380.                  s += Cities[0].city_ + "_";
  381.              }
  382.              else if(i==Cities.size()-1)
  383.                 { s += Cities[Cities.size()-1].city_;}
  384.              else
  385.              {
  386.                  s += Cities[i].city_ + "_";
  387.              }
  388.  
  389.          }
  390.  
  391.         //  QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
  392.         //  db.setDatabaseName("C:\\SQLiteDatabaseBrowserPortable\\Data\\cities.db");
  393.          //  db.open();
  394.            QSqlQuery query;
  395.            //таблиця міст через які їхатиме поїзд
  396.            train_name = s;
  397.            query.exec("create table "+s+" "
  398.                                                        "(id integer primary key, "
  399.                                                        "city varchar(30), "
  400.                                                        "arrival_time varchar(30), "
  401.                                                        "depart_time varchar(30), "
  402.                                                        "distance_to_previous varchar(5),"
  403.                                                        "population varchar(8))"
  404.                                                        );//таблиця міст через які йде поїзд
  405.  
  406.             for(int i = 0; i<Cities.size();i++)//ініціалізація зупинок поїзда місто-час приїзду-час відїзду-населення міста відстань до сусідніх міст
  407.                {
  408.                    if(i == 0)
  409.                    {
  410.                        QString num = "0";
  411.      query.exec("INSERT INTO " +s+"(city,arrival_time,depart_time,distance_to_previous,population)"
  412.      +"values('"+Cities[i].city_+"','"+Cities[i].depart_+"','"+Cities[i].leave_+"','"
  413.                       +num+"','"+get_population(Cities[i].city_)+"')");
  414.                    }
  415.                    else
  416.                    {
  417.                        QString number_ = QString::number(get_distance_to_previous(Cities,i));
  418.      query.exec("INSERT INTO " +s+"(city,arrival_time,depart_time,distance_to_previous,population)"
  419.      +"values('"+Cities[i].city_+"','"+Cities[i].depart_+"','"+Cities[i].leave_+"','"
  420.      +number_+"','"+get_population(Cities[i].city_)+"')");
  421.                    }
  422.                }
  423.           //створення таблиці з пасажирами нового маршруту
  424.            s += "_people";
  425.            if(query.exec("create table "+s+" "
  426.                                                  "(id integer primary key, "
  427.                                                  "depart_city varchar(30), "
  428.                                                  "arrival_city varchar(30), "
  429.                                                  "firstname varchar(30), "
  430.                                                  "lastname varchar(30), "
  431.                                                  "bot varchar(10),"
  432.                                                  "vagon integer,"
  433.                                                  "place integer,"
  434.                                                  "privileges varchar(5), "
  435.                                                  "distance integer, "
  436.                                                  "ticket_price integer)"))
  437.           {
  438.             // Add new train
  439.         /*      QString filename="Data.txt";
  440.               QFile file( filename );
  441.               if ( file.open(QIODevice::Append|QIODevice::Text) )
  442.               {
  443.                   QTextStream stream( &file );
  444.                   stream << s<<'\n';
  445.               }*/
  446.              // file.close();
  447.                      db.close();
  448.           }
  449.           else
  450.           {
  451.              duplicate = "the train is in data base";
  452.                    db.close();
  453.           }
  454.  
  455.          //dialog is closed
  456.     }
  457. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement