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 <QtSql/QSqlDatabase>
- #include <QtSql/QSqlQuery>
- 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);
- QStringList L;
- QSqlDatabase 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())
- return true;
- return false;
- }
- void Dialog::DBsearching(const QString & s)
- {
- ui->lineEdit->setText(s);
- }
- 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();//
- }
- 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;
- }
- void Dialog::on_buttonBox_accepted()my first attempt to i could get the result n Mainwindow.cpp but it could be incorrect
- {
- 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);
- }
- }
- 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
- {
- 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);
- }
- Dialog::close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement