Russian Qt Forum

Qt => Общие вопросы => Тема начата: phill13 от Июнь 05, 2010, 17:03



Название: Передача переменной из одной формы в другую
Отправлено: phill13 от Июнь 05, 2010, 17:03
Извените если такой вопрос был, но не как ума не приложу как передать данные из одной формы в другую. Юзаю Qt Creator.

Есть 2 формы А и Б.
В А с помощью кнопки открываем форму Б и нада туда передать переменную из А.
Пробывал создать (в public формы А) функцию и в ней return j , птом засовываю в форму Б, А.h и вызываю эту функцию.
Проект не компилится пишит ошибку cannot coll member function "название функции" without object .


Название: Re: Передача переменной из одной формы в другую
Отправлено: alexman от Июнь 05, 2010, 17:13
Код зацени?


Название: Re: Передача переменной из одной формы в другую
Отправлено: phill13 от Июнь 05, 2010, 17:37
Форма А
Код:
#ifndef STUDENT_H
#define STUDENT_H

#include <QDialog>
#include <QtSql>
#include <QtGui>

namespace Ui {
    class student;
}

class student : public QDialog {
    Q_OBJECT
public:
    student(QWidget *parent = 0);
    ~student();
    void stud();
    int setttt();
    int j;

Форма Б
Код:
#include <QDialog>

namespace Ui {
    class Student_inform;
}

class Student_inform : public QDialog {
    Q_OBJECT
public:
    Student_inform(QWidget *parent = 0);
    ~Student_inform();
   void setData(int i);

protected:
    void changeEvent(QEvent *e);

private:
    Ui::Student_inform *ui;
};
cpp
Код:
#include "student_inform.h"
#include "ui_student_inform.h"
#include "student.h"

Student_inform::Student_inform(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Student_inform)
{
    ui->setupUi(this);
    setData(student::setttt());
}

Student_inform::~Student_inform()
{
    delete ui;
}

void Student_inform::changeEvent(QEvent *e)
{
    QDialog::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

void Student_inform::setData(int i)
{
    int h = i;
    ui->label->setText(QString("%1").arg(h));
}


Название: Re: Передача переменной из одной формы в другую
Отправлено: shirushizo от Июнь 05, 2010, 18:26
Я так думаю, на эту строку ругается:
setData(student::setttt());

Объекта класса student не наблюдаю.Если при вызове он у тебя будет родителем тогда:
Student_inform::Student_inform(QWidget *parent):QDialog(parent), ui(new Ui::Student_inform)
{
    ui->setupUi(this);
    stud=qobject_cast<student*>(parent);
    setData(stud->setttt());
}

если нет, то Student_inform::Student_inform(student* stud,QWidget *parent):QDialog(parent), ui(new Ui::Student_inform)


Название: Re: Передача переменной из одной формы в другую
Отправлено: phill13 от Июнь 05, 2010, 18:30
если не будет родителем то Student_inform::Student_inform(student* stud,QWidget *parent):QDialog(parent), ui(new Ui::Student_inform)
Формы отдельны друг от друга.

Можете пожалуйста пояснить эту запись и показать куда ее тыкать.

(я создаю две отдельные формы в креаторе и мне нада из одной формы закинуть в другую данные) как это правильно делается?


Название: Re: Передача переменной из одной формы в другую
Отправлено: lit-uriy от Июнь 05, 2010, 19:19
(я создаю две отдельные формы в креаторе и мне нада из одной формы закинуть в другую данные) как это правильно делается?
также как и при передачи данных из одного класса в другой


Название: Re: Передача переменной из одной формы в другую
Отправлено: Igors от Июнь 05, 2010, 19:42
(я создаю две отдельные формы в креаторе и мне нада из одной формы закинуть в другую данные) как это правильно делается?
1) Убедиться что точно надо - ситуация когда одно и то же поле данных появляется в 2 и более формах всегда подозрительна

2) Передать общее поле в конструктор класса B который вызывается из А. По значению или ссылке - надо смотреть

3) Если надо редактировать поле в B - тогда слот/сигнал (будем надеяться до этого дело не дойдет)

Создавать формы интерактивно - дело хорошее, но рихтовать почти всегда приходится, надо к этому относиться спокойно


Название: Re: Передача переменной из одной формы в другую
Отправлено: phill13 от Июнь 05, 2010, 21:15
Я так понимаю форму Б наследником делать нада от формы А? я сделал форму Б наследником формы А и получается что форма Б открывается не в отдельном окне а в нем.

Я в форме А отображаю таблицу из БД птом выделю строку в tableView(вычисляю значение id) и по кнопке открываю форму Б в ней по этому id должны отобраться записи из БД.
Как мне передать это значение напиши пожалуйста кто-нить, а то совсем уже нечего в голову не приходит =( Нечего не пойму...


Название: Re: Передача переменной из одной формы в другую
Отправлено: kambala от Июнь 06, 2010, 01:42
Передать общее поле в конструктор класса B который вызывается из А.
грубо (и тут вызывается откуда-то ещё, а не из А):
Код
C++ (Qt)
A *a = new A;
B *b = new B(a, a->id);
...
B::B(QWidget *parent, int id)
{
  // делай что нужно с этим id
}
 


Название: Re: Передача переменной из одной формы в другую
Отправлено: phill13 от Июнь 06, 2010, 12:15
Спасиба большое все получилось