Advertisement
Guest User

Untitled

a guest
Nov 11th, 2017
172
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 <QtSql/QSqlDatabase>
  9. #include <QtSql/QSqlQuery>
  10. Dialog::Dialog(QWidget *parent) :
  11.     QDialog(parent),
  12.     ui(new Ui::Dialog)
  13. {
  14.     ui->setupUi(this);
  15.     ui->tableWidget->setColumnWidth(0, 120);
  16.     ui->tableWidget->setColumnWidth(1, 120);
  17.     ui->tableWidget->setColumnWidth(2, 160);
  18.     ui->tableWidget->setColumnWidth(3, 160);
  19.     ui->tableWidget->setColumnWidth(4, 170);
  20.  
  21.  
  22.     QStringList L;
  23.     QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
  24.     db.setDatabaseName("C:\\SQLiteDatabaseBrowserPortable\\Data\\cities.db");
  25.     db.open();
  26.      QSqlQuery query;
  27.     query.exec("SELECT city FROM distance_between_cities");
  28.     while(query.next())
  29.     {
  30.         L<<query.value(0).toString();
  31.     }
  32.     db.close();
  33.     StringCompleter = new QCompleter(L,this);
  34.     StringCompleter->setCaseSensitivity(Qt::CaseInsensitive);
  35.  
  36.     AddRow();
  37. }
  38. QString Dialog::get_time(int row,int col)
  39. {
  40.     QDateTimeEdit *s = ui->tableWidget->cellWidget(row,col)->findChild<QDateTimeEdit*>();
  41.  
  42.     QDateTime datetime2 = s->dateTime(); //prints QDateTimeEdit to textEdit
  43.  
  44.     QString timeDateString = datetime2.toString(s->displayFormat());
  45.     return timeDateString;
  46. }
  47. QString Dialog::get_city(int row)
  48. {
  49.     QLineEdit *l = ui->tableWidget->cellWidget(row,2)->findChild<QLineEdit*>();
  50.     return l->text();
  51. }
  52. /// seconds as "X days, X hours, X minutes, X seconds" string
  53. QString secondsToString(qint64 seconds)
  54. {
  55.   const qint64 DAY = 86400;
  56.   qint64 days = seconds / DAY;
  57.   QTime t = QTime(0,0).addSecs(seconds % DAY);
  58.   return QString("%1 days, %2 hours, %3 minutes, %4 seconds")
  59.     .arg(days).arg(t.hour()).arg(t.minute()).arg(t.second());
  60. }
  61. bool Dialog::cities_is_filled()
  62. {
  63.    for(int row = 0; row<ui->tableWidget->rowCount();row++)
  64.    {
  65.        QLineEdit *l = ui->tableWidget->cellWidget(row,2)->findChild<QLineEdit*>();
  66.        if(!true_city(l))
  67.        {
  68.            return false;
  69.        }
  70.    }
  71.    return true;
  72. }
  73.  bool Dialog::true_city(QLineEdit *s)
  74.  {
  75.      QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
  76.      db.setDatabaseName("C:\\SQLiteDatabaseBrowserPortable\\Data\\cities.db");
  77.      db.open();
  78.       QSqlQuery query;
  79.      query.exec("SELECT city FROM distance_between_cities WHERE city = '"+s->text()+"'");
  80.      if(query.next())
  81.          return true;
  82.      return false;
  83.  }
  84. void Dialog::DBsearching(const QString & s)
  85. {
  86.     ui->lineEdit->setText(s);
  87. }
  88. void Dialog::RemoveRow()
  89. {
  90.     QWidget *w = qobject_cast<QWidget *>(sender()->parent());
  91.     if(w){
  92.         if(ui->tableWidget->rowCount()>1)
  93.         {
  94.         int row = ui->tableWidget->indexAt(w->pos()).row();
  95.         ui->lineEdit->setText(QString::number( row ));
  96.         ui->tableWidget->removeRow(row);
  97.         ui->tableWidget->setCurrentCell(0, 0);
  98.         }
  99.     }
  100. }
  101. void Dialog::AddRow()
  102. {
  103.  /*   QSqlDatabase dl;
  104.     QStringList L;
  105.     L<<"jOHN"<<"sAM"<<"Smith"<<"Arr"<<"ABB"<<"C";
  106.     QCompleter *StringCompleter = new QCompleter(L,this);
  107.     StringCompleter->setCaseSensitivity(Qt::CaseInsensitive);*/
  108.     if(ui->tableWidget->rowCount() == 0 || true_city(ui->tableWidget->cellWidget(ui->tableWidget->rowCount()-1,2)->findChild<QLineEdit*>()))
  109.     {
  110.         ui->tableWidget->insertRow(ui->tableWidget->rowCount());
  111.         for(int i = 0; i<ui->tableWidget->columnCount(); i++)
  112.         {
  113.             if(i==0)
  114.             {
  115.                 QWidget* pWidget = new QWidget(this);
  116.                 QPushButton* btn_edit = new QPushButton();
  117.                 btn_edit->setText("Remove");
  118.                 connect(btn_edit, &QPushButton::clicked, this, &Dialog::RemoveRow);
  119.                 QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
  120.                 pLayout->addWidget(btn_edit);
  121.                 pLayout->setAlignment(Qt::AlignCenter);
  122.                 pLayout->setContentsMargins(0, 0, 0, 0);
  123.                 pWidget->setLayout(pLayout);
  124.                 ui->tableWidget->setCellWidget(ui->tableWidget->rowCount()-1, i, pWidget);
  125.                 continue;
  126.             }
  127.             if(i == 1)
  128.             {
  129.                 QWidget* pWidget = new QWidget(this);
  130.                 QPushButton* btn_edit = new QPushButton();
  131.                 btn_edit->setText("Add");
  132.                 connect(btn_edit, &QPushButton::clicked, this, &Dialog::Add);
  133.                 QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
  134.                 pLayout->addWidget(btn_edit);
  135.                 pLayout->setAlignment(Qt::AlignCenter);
  136.                 pLayout->setContentsMargins(0, 0, 0, 0);
  137.                 pWidget->setLayout(pLayout);
  138.                 ui->tableWidget->setCellWidget(ui->tableWidget->rowCount()-1, i, pWidget);
  139.                 continue;
  140.             }
  141.             if(i==2)// I CREATE LINEEDIT IN TABLEWIDGET HERE
  142.             {
  143.                QWidget* pWidget = new QWidget(this);
  144.                QLineEdit *line = new QLineEdit();
  145.                line->setPlaceholderText("city name");
  146.                line->setCompleter(StringCompleter);
  147.                 connect(line, SIGNAL(textChanged(const QString &)), this, SLOT(DBsearching(const QString &)));
  148.                QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
  149.                pLayout->addWidget(line);
  150.                pLayout->setAlignment(Qt::AlignCenter);
  151.                pLayout->setContentsMargins(0, 0, 0, 0);
  152.                pWidget->setLayout(pLayout);
  153.                ui->tableWidget->setCellWidget(ui->tableWidget->rowCount()-1, i, pWidget);
  154.             }
  155.             if(i == 3)
  156.             {
  157.                 QWidget* pWidget = new QWidget(this);
  158.                 QDateTimeEdit *line = new QDateTimeEdit();
  159.                 line->setDisplayFormat("yyyy-MM-dd HH:mm");
  160.                 line->setDate(QDate::currentDate());
  161.                 line->setTime(QTime::currentTime());
  162.                 QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
  163.                 pLayout->addWidget(line);
  164.                 pLayout->setAlignment(Qt::AlignCenter);
  165.                 pLayout->setContentsMargins(0, 0, 0, 0);
  166.                 pWidget->setLayout(pLayout);
  167.                 ui->tableWidget->setCellWidget(ui->tableWidget->rowCount()-1, i, pWidget);
  168.             }
  169.             if(i==4)
  170.             {
  171.                 QWidget* pWidget = new QWidget(this);
  172.                 QDateTimeEdit *line = new QDateTimeEdit();
  173.                 line->setDisplayFormat("yyyy-MM-dd HH:mm");
  174.                 line->setDate(QDate::currentDate());
  175.                 line->setTime(QTime::currentTime());
  176.                 QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
  177.                 pLayout->addWidget(line);
  178.                 pLayout->setAlignment(Qt::AlignCenter);
  179.                 pLayout->setContentsMargins(0, 0, 0, 0);
  180.                 pWidget->setLayout(pLayout);
  181.                 ui->tableWidget->setCellWidget(ui->tableWidget->rowCount()-1, i, pWidget);
  182.             }
  183.         }
  184.     }
  185. }
  186. void Dialog::Add()
  187. {
  188.     QLineEdit *l = ui->tableWidget->cellWidget(0,2)->findChild<QLineEdit*>();
  189.     ui->lineEdit->setText(l->text());
  190.  
  191.     QDateTimeEdit *s = ui->tableWidget->cellWidget(0,3)->findChild<QDateTimeEdit*>();
  192.  
  193.     QDateTime datetime2 = s->dateTime(); //prints QDateTimeEdit to textEdit
  194.  
  195.     QString timeDateString = datetime2.toString(s->displayFormat());
  196.     ui->lineEdit->setText(timeDateString);
  197.   /*  QString format = "yyyy-MM-dd HH:mm:ss";
  198.      QDateTime a = QDateTime::fromString("2013-06-13 11:00:45", format);
  199.      QDateTime b = QDateTime::fromString("2013-06-14 09:03:23", format);
  200.     ui->lineEdit->setText(secondsToString(a.secsTo(b)));*/
  201.  
  202.      //qDebug() << secondsToString(a.secsTo(b));
  203.     /*int year = datetime2.date().year();
  204.     int month = datetime2.date().month();
  205.     int day = datetime2.date().day();*/
  206.   //  QString timeDateString = datetime2.toString(s->displayFormat());
  207.  
  208.    //  ui->lineEdit->setText(QString::number(month) +"  "+ QString::number(day) +" " + QString::number(year));
  209.   //  QTableWidgetItem* w = ui->tableWidget->item(0,2);
  210.  
  211.   // QString s =  w->text();
  212.   //  QHBoxLayout *l = qobject_cast<QHBoxLayout*>(w);
  213.     //QLineEdit *l =  qobject_cast<QLineEdit*>(w);
  214.    // ui->lineEdit->setText(l->text());
  215.   // QLineEdit*l = qobject_cast<QLineEdit*>(ui->tableWidget->cellWidget(0,2)); it should
  216.  //   be a code for getting qlineedit value
  217.  
  218.   //  QHBoxLayout* tmpLineEdit = new QHBoxLayout();
  219.   //  tmpLineEdit->addWidget(ui->tableWidget->item(0,2));
  220.  //   auto p = ui->tableWidget->item(0,2);
  221.    // ui->lineEdit->setText(p->text());
  222.   //          qobject_cast<QLayout*>(ui->tableWidget->item(0,2));
  223.    /*if(tmpLineEdit == nullptr)
  224.    {
  225.        ui->lineEdit->setText("error");
  226.    }
  227.    else
  228.          ui->lineEdit->setText("egewg");
  229.  //   ui->lineEdit->setText(l->text());
  230.  
  231.     /*QString StringItem;  My trying to get value of qlineedit
  232.         QTableWidgetItem *pToItem;
  233.          pToItem  = ui->tableWidget->item(0,2);
  234.         StringItem=pToItem->text();
  235.         ui->lineEdit->setText(StringItem);*/
  236.     AddRow();//
  237.  
  238. }
  239. void Dialog::onClicked()
  240. {
  241.     QWidget *w = qobject_cast<QWidget *>(sender()->parent());
  242.     if(w){
  243.         int row = ui->tableWidget->indexAt(w->pos()).column();
  244.         ui->lineEdit->setText(QString::number( row ));
  245.      //   ui->tableWidget->removeRow(row);
  246.         ui->tableWidget->setCurrentCell(0, 0);
  247.     }
  248. }
  249.  
  250. Dialog::~Dialog()
  251. {
  252.     delete ui;
  253. }
  254.  
  255. void Dialog::on_buttonBox_accepted()my first attempt to i could get the result n Mainwindow.cpp but it could be incorrect
  256. {
  257.      Cities.clear();
  258.      for(int row = 0; row<ui->tableWidget->rowCount(); row++)
  259.      {
  260.          cities s(get_city(row),get_time(row,3),get_time(row,4));
  261.          Cities.push_back(s);
  262.      }
  263. }
  264.  
  265. void Dialog::on_pushButton_clicked()// my attempt to make another button but I could not to get result in Mainwindow.cpp but could check correctly
  266. {
  267.     if(cities_is_filled())
  268.     {
  269.         Cities.clear();
  270.         for(int row = 0; row<ui->tableWidget->rowCount(); row++)
  271.         {
  272.             cities s(get_city(row),get_time(row,3),get_time(row,4));
  273.             Cities.push_back(s);
  274.         }
  275.         Dialog::close();
  276.     }
  277. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement