LINUX.ORG.RU

Ответ на: комментарий от belous_k_a

Язык C++

Вот в том то и проблема, что, насколько я понимаю, нельзя обращаться к ТИПУ переменных (будь то класс, переменная и тд), но можно Обращаться к переменным этого типа. А переменные объявлены в main :(

disee ★★★
() автор топика
Ответ на: комментарий от disee

А извините, наивно полагал что вы планируете обращаться к членам класса, то что вы желаете невозможно в принципе в том виде. Вам надо либо сделать переменные глобальными (за что вам грозят муки в аду), либо членами класса.

Но еще лучше, ознакомиться с базовыми концепциями программирования глубже, хотябы с понятием времени жизни переменных.

belous_k_a
()
Ответ на: комментарий от disee

Всё-таки ответь на вопрос (в первую очередь себе): зачем?! Чего ты хочешь добиться. И похоже ты путаешь понятие класса и экземпляра класса.

А вообще вот такое извращение в самом простом варианте.

int main(void)
{
  class1 a;
  class2 b;
  b.pc1 = &a;
  return 0;
}

class class1
{
public:
  int i1;
}

class class2
{
public:
 class1 *pc1;
 int i2;
 void metod(void);
}

void class2::metod(void)
{
  pc1->i1 = i2;
}

invy ★★★★★
()
struct A
{
	int a;
}

struct B
{
	B(int &a): b(a) {}
	int &b;
}

int main()
{
	A a;
	B b(a.a);
}

доктор Зло одобряет такой код.

anonymous
()
Ответ на: комментарий от invy

насколько понимаю класс- это понятие как int, double и тд, а экземпляр класса это переменная типа это класса (например class1 a; в этом примере а- экземпляр (так же как в int a; ) )

А такое извращение вот почему:

Я пытаюсь научится писать на Qt, основной класс у меня MainWindow, так же мне нужна форма диалога, поэтому у меня есть класс Dialog. Экземпляры и того и другого создаются в мэйне, но как сделать так что бы при нажатии кнопки из MainWindow выполнялся напрмер d.show(); (при условии что в мэйне Dialog d;) ? Данная проблема решаема если непосредственно в классе MainWindow объяви Dialog d; , но когда по нажатию кнопки на форме диалога нужно отправить информацию назад в MainWindow.... в общем тут и начались извращения

disee ★★★
() автор топика
Ответ на: комментарий от disee

Я конечно qt не знаю, но второй вариант более правильный.
Если Dialog принадлежит окну, то зачем его пихать в main?

И в чём проблема «отправки данных» в MainWindow? Это можно реализовать по-разному в зависимости от того, что тебе надо. Например передавать в диалог указатель (или ссылку) на твоё окно.

invy ★★★★★
()
Ответ на: комментарий от disee

Тогда оформи диалог примерно таким образом:

class MyDialog : public QDialog {
    Q_OBJECT
public:
    MyDialog(QWidget *parent = 0);
    ~MyDialog();

    void setData(const Data & data);
    Data getData();
};

и пусть он принадлежит MainWindow, тогда в MainWindow можно будет сделать setData() и MyDialog::exec(), после которого получить данные при помощи getData

unC0Rr ★★★★★
()
Ответ на: комментарий от disee

1. Объяви Dialog как поле класса MainWindow
2. Для обмена информацией в этом случае идеально подходит концепция сигналов-влотов.

0. (и самое важное) Перед тем, как использовать Qt, необходимо сначала изучить С++ хотя бы на базовом уровне, затем изучить Qt хотя бы на базовом уровне (все это достигается чтением хороших книжек), а уже потом начинать что-то писать.

trex6 ★★★★★
()
Ответ на: комментарий от disee

Экземпляры и того и другого создаются в мэйне

А что мешает создавать их в конструкторе MainDialog, или даже прямо в методе по нажатию кнопки (если диалог маленький)?

anonymous
()
Ответ на: комментарий от disee

Не обязательно передавать в конструкторе используй getter и setter методы.

andreykyz ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.