Russian Qt Forum

Qt => Вопросы новичков => Тема начата: kaw от Апрель 07, 2011, 16:52



Название: как получить доступ к значениям 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);