Russian Qt Forum
Июнь 16, 2024, 03:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Передача переменной из одной формы в другую  (Прочитано 14552 раз)
phill13
Гость
« : Июнь 05, 2010, 17:03 »

Извените если такой вопрос был, но не как ума не приложу как передать данные из одной формы в другую. Юзаю Qt Creator.

Есть 2 формы А и Б.
В А с помощью кнопки открываем форму Б и нада туда передать переменную из А.
Пробывал создать (в public формы А) функцию и в ней return j , птом засовываю в форму Б, А.h и вызываю эту функцию.
Проект не компилится пишит ошибку cannot coll member function "название функции" without object .
Записан
alexman
Гость
« Ответ #1 : Июнь 05, 2010, 17:13 »

Код зацени?
Записан
phill13
Гость
« Ответ #2 : Июнь 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));
}
Записан
shirushizo
Гость
« Ответ #3 : Июнь 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)
Записан
phill13
Гость
« Ответ #4 : Июнь 05, 2010, 18:30 »

если не будет родителем то Student_inform::Student_inform(student* stud,QWidget *parent):QDialog(parent), ui(new Ui::Student_inform)
Формы отдельны друг от друга.

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

(я создаю две отдельные формы в креаторе и мне нада из одной формы закинуть в другую данные) как это правильно делается?
« Последнее редактирование: Июнь 05, 2010, 18:32 от phill13 » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Июнь 05, 2010, 19:19 »

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

Юра.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Июнь 05, 2010, 19:42 »

(я создаю две отдельные формы в креаторе и мне нада из одной формы закинуть в другую данные) как это правильно делается?
1) Убедиться что точно надо - ситуация когда одно и то же поле данных появляется в 2 и более формах всегда подозрительна

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

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

Создавать формы интерактивно - дело хорошее, но рихтовать почти всегда приходится, надо к этому относиться спокойно
Записан
phill13
Гость
« Ответ #7 : Июнь 05, 2010, 21:15 »

Я так понимаю форму Б наследником делать нада от формы А? я сделал форму Б наследником формы А и получается что форма Б открывается не в отдельном окне а в нем.

Я в форме А отображаю таблицу из БД птом выделю строку в tableView(вычисляю значение id) и по кнопке открываю форму Б в ней по этому id должны отобраться записи из БД.
Как мне передать это значение напиши пожалуйста кто-нить, а то совсем уже нечего в голову не приходит =( Нечего не пойму...
« Последнее редактирование: Июнь 05, 2010, 21:41 от phill13 » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #8 : Июнь 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
}
 
« Последнее редактирование: Июнь 06, 2010, 01:44 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
phill13
Гость
« Ответ #9 : Июнь 06, 2010, 12:15 »

Спасиба большое все получилось
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.071 секунд. Запросов: 23.