Название: как получить доступ к значениям QlistView из другой формы?
Отправлено: kaw от Апрель 07, 2011, 16:52
как получить доступ к значениям QlistView из другой формы? чтобы вставить с sql запрос QSqlQuery query; query.prepare("SELECT kt_text FROM kt WHERE id_kt=:id "); query.bindValue(":id", ?); <- Вот сюда query.exec(); query.first();
Название: Re: как получить доступ к значениям QlistView из другой формы?
Отправлено: Пантер от Апрель 07, 2011, 16:58
Мда... Что за "форма"? Привел код, но совсем не тот. :)
Название: Re: как получить доступ к значениям QlistView из другой формы?
Отправлено: kaw от Апрель 07, 2011, 17:06
есть QlistView который заполняется вот так switch (wins) { case 1: { model->setQuery("SELECT tp_text, id_tp FROM tp"); break; } case 2: { model->setQuery("SELECT kt_text, id_kt FROM kt"); break; } case 3: { model->setQuery("SELECT year, id_hour FROM hours"); break; } } QListView * view = ui->listView; view->setModel(model); view->setModelColumn(0); При выделении строки и нажатия редактирования. Открывается окно редактирования, необходимо передать значение id записи в это окно из QListView
Название: Re: как получить доступ к значениям QlistView из другой формы?
Отправлено: Пантер от Апрель 07, 2011, 18:14
Опять же нихрена не понятно. Ну, постараюсь ответить: C++ (Qt) class MyDialog : public QDialog { .............. QString id () const { return id_; } void setId (const QString& id) { id_ = id; } ................. private: QString id_;//This is your id ................... };
И где-то в другом классе: C++ (Qt) .................... MyDialog d; if (d.exec ()) { const QString& id = d.id (); } ...................
Или C++ (Qt) .................... MyDialog d; d.setId (id); d.exec (); ................ }
Название: Re: как получить доступ к значениям QlistView из другой формы?
Отправлено: kaw от Апрель 08, 2011, 11:00
Я в Qt нуб, пришел с дельфи вот код двух классов объясните по подробнее плиз, смысла не понял. C++ (Qt) #include "dots.h" #include "ui_dots.h" Dots::Dots(QWidget *parent) : QDialog(parent), ui(new Ui::Dots) { ui->setupUi(this); QTimer::singleShot (0, this, SLOT(slotStarted())); } Dots::~Dots() { delete ui; } void Dots::on_pushButton_clicked() { switch (wins) { case 1: { DotsEdit *dotsedit = new DotsEdit(this); dotsedit->setModal(true); dotsedit->setWindowTitle(trUtf8("Новая точка продаж")); dotsedit->exec(); break; } case 2: { Peoples *people = new Peoples(this); people->setModal(true); people->setWindowTitle(trUtf8("Новый консультант")); people->exec(); break; } case 3: { WorkTime *worktime = new WorkTime(this); worktime->setModal(true); worktime->setWindowTitle(trUtf8("Новый календарь")); worktime->exec(); break; } } } void Dots::on_pushButton_2_clicked() { //Редактирование int row = ui->listView->currentIndex().row(); if (row > -1 ) { switch (wins) { case 1: { DotsEdit *dotsedit = new DotsEdit(this); dotsedit->setModal(true); dotsedit->setWindowTitle(trUtf8("Редактирование точки продаж")); dotsedit->exec(); break; } case 2: { Peoples *people = new Peoples(this); people->setModal(true); people->setWindowTitle(trUtf8("Редактирование консультанта")); people->exec(); break; } case 3: { WorkTime *worktime = new WorkTime(this); worktime->setModal(true); worktime->setWindowTitle(trUtf8("Редактирование календаря")); worktime->exec(); break; } } } } void Dots::on_pushButton_3_clicked() { // delete } void Dots::slotStarted() { QSqlQueryModel * model = new QSqlQueryModel(0); if (windowTitle().toUtf8() == "Список точек продаж") wins = 1; if (windowTitle().toUtf8() == "Список консультантов") wins = 2; if (windowTitle().toUtf8() == "Список рабочих часов") wins = 3; if (windowTitle().toUtf8() == "Список графиков") wins = 4; switch (wins) { case 1: { model->setQuery("SELECT tp_text, id_tp FROM tp"); break; } case 2: { model->setQuery("SELECT kt_text, id_kt FROM kt"); break; } case 3: { model->setQuery("SELECT year, id_hour FROM hours"); break; } } QListView * view = ui->listView; view->setModel(model); view->setModelColumn(0); }
C++ (Qt) #include "peoples.h" #include "ui_peoples.h" Peoples::Peoples(QWidget *parent) : QDialog(parent), ui(new Ui::Peoples) { ui->setupUi(this); QTimer::singleShot (0, this, SLOT(slotStarted())); } Peoples::~Peoples() { delete ui; } void Peoples::on_pushButton_2_clicked() { close(); } void Peoples::slotStarted() { if (windowTitle().toUtf8() == "Новый консультант") wins = 1; if (windowTitle().toUtf8() == "Редактирование консультанта") wins = 2; QDate date; switch (wins) { case 1: { date = QDate::currentDate(); ui->dateEdit->setDate(date); ui->dateEdit_2->setDate(date); break; } case 2: { QSqlQuery query; query.prepare("SELECT kt_text FROM kt WHERE id_kt=:id "); query.bindValue(":id",1); query.exec(); query.first(); ui->lineEdit->setText(query.value(0).toString()); query.prepare("SELECT begin, end FROM kt_time WHERE id_kt=:id "); query.bindValue(":id", 1); query.exec(); query.first(); QString dt; dt= query.value(0).toString(); date = QDate::fromString(dt,"dd.MM.yyyy"); ui->dateEdit->setDate(date); dt = query.value(1).toString(); date = QDate::fromString(dt,"dd.MM.yyyy"); ui->dateEdit_2->setDate(date); break; } } }
Во втором классе необходимо вместо query.bindValue(":id", 1); вставлять id из первого класса в QlistView Вот так вроде ::)
Название: Re: как получить доступ к значениям QlistView из другой формы?
Отправлено: mutineer от Апрель 08, 2011, 11:39
Выше тебе же написали: отдавай id в объект диалога при его создании
Но проверять тип диалога по его тайтлу это за гранью добра и зла...
Название: Re: как получить доступ к значениям QlistView из другой формы?
Отправлено: Пантер от Апрель 08, 2011, 11:44
kaw, я в свое время сам переполз сначала с делфи на билдер, а потом на Кьют и понимаю, как это тяжело. Мой совет - представь, что ты вообще ничего не знаешь и начни читать книжки по c++ и Qt. Нахрапом действовать не получится.
P.S. Я от "последствий" делфи отделывался года 2-3.
Название: Re: как получить доступ к значениям QlistView из другой формы?
Отправлено: kaw от Апрель 08, 2011, 11:48
Спасибо за совет, стараюсь. Но очень трудно что-то :(
Название: Re: как получить доступ к значениям QlistView из друг
Отправлено: Пантер от Апрель 08, 2011, 11:49
Трудно очень. Особенно когда пытаешься делфийские привычки перетащить. Тут все совсем по-другому.
Название: Re: как получить доступ к значениям QlistView из другой формы?
Отправлено: kaw от Апрель 08, 2011, 12:27
А если описать входные параметры класса при его создании? C++ (Qt) #ifndef PEOPLES_H #define PEOPLES_H #include <QDialog> #include <QTimer> #include <QSqlQuery> #include "dots.h" namespace Ui { class Peoples; } class Peoples : public QDialog { Q_OBJECT public: explicit Peoples(QWidget *parent = 0, const int &id_rec=0, const int &id_id=0); ~Peoples(); private slots: void on_pushButton_2_clicked(); private: Ui::Peoples *ui; int wins; int id; }; #endif // PEOPLES_H
C++ (Qt) #include "peoples.h" #include "ui_peoples.h" Peoples::Peoples(QWidget *parent, const int &id_rec, const int &id_id) : QDialog(parent), ui(new Ui::Peoples) { ui->setupUi(this); wins = id_rec; id = id_id; QDate date; switch (wins) { case 1: { date = QDate::currentDate(); ui->dateEdit->setDate(date); ui->dateEdit_2->setDate(date); break; } case 2: { QSqlQuery query; query.prepare("SELECT kt_text FROM kt WHERE id_kt=:id "); query.bindValue(":id",1); query.exec(); query.first(); ui->lineEdit->setText(query.value(0).toString()); query.prepare("SELECT begin, end FROM kt_time WHERE id_kt=:id "); query.bindValue(":id", 1); query.exec(); query.first(); QString dt; dt= query.value(0).toString(); date = QDate::fromString(dt,"dd.MM.yyyy"); ui->dateEdit->setDate(date); dt = query.value(1).toString(); date = QDate::fromString(dt,"dd.MM.yyyy"); ui->dateEdit_2->setDate(date); break; } } } Peoples::~Peoples() { delete ui; } void Peoples::on_pushButton_2_clicked() { close(); }
И вызывать ее C++ (Qt) void Dots::on_pushButton_2_clicked() { //Редактирование int row = ui->listView->currentIndex().row(); if (row > -1 ) { switch (wins) { case 1: { DotsEdit *dotsedit = new DotsEdit(this,1,wins); dotsedit->setModal(true); dotsedit->setWindowTitle(trUtf8("Редактирование точки продаж")); dotsedit->exec(); break; } case 2: { Peoples *people = new Peoples(this,1,wins); people->setModal(true); people->setWindowTitle(trUtf8("Редактирование консультанта")); people->exec(); break; } case 3: { WorkTime *worktime = new WorkTime(this,1,wins); worktime->setModal(true); worktime->setWindowTitle(trUtf8("Редактирование календаря")); worktime->exec(); break; } } } }
Что скажите?
Название: Re: как получить доступ к значениям QlistView из другой формы?
Отправлено: Пантер от Апрель 08, 2011, 12:30
Скажу, что плохо. :) Хотя бы вот так: Peoples(int id_rec = 0, int id_id = 0, QWidget *parent = 0);
|