Название: Взаимное управление объектами равноправных классов. Отправлено: Pupil от Август 26, 2010, 09:39 Доброе утро!
В примере два равноправных виджета (без наследования). При обращении из первого класса к объекту второго класса c целью закрытия второго окна, при вызове слота Пример выдаёт ошибку: "mywidget.cpp:29: error: cannot call member function `bool QWidget::close()' without object" При этом вложенные методы и свойства объекта в редакторе Qt Creator доступны для выбора. (Библиотека Qt 4.5.3.) Вопросы о "наследовании" классов и создании общего "дойного" класса прошу в данной теме не рассматривать. Исходный код: MyWidget.cpp Код: #include "mywidget.h" Код: #ifndef MYWIDGET_H Form2.h Код: #ifndef FORM2_H Form2.cpp Код: #include "form2.h" Название: Re: Взаимное управление объектами равноправных классов. Отправлено: crossly от Август 26, 2010, 09:45 а что
Цитировать mywidget.cpp:29: error: cannot call member function `bool QWidget::close()' without object вам не о чем не говорит... может стоит книжку по с++ почитать ??Название: Re: Взаимное управление объектами равноправных классов. Отправлено: lit-uriy от Август 26, 2010, 09:55 Form2::close(); таким образом можно вызывать либо статические функции класса, либо методы базового класса.MyWidget::close(); П.С. Надо подтягивать Си++ Название: Re: Взаимное управление объектами равноправных классов. Отправлено: Pupil от Август 26, 2010, 10:34 В CBuilder такие решения без вопросов работают. По данной же теме: при попытке изменения текста в QLabel из класса 2 приложение компилируется, но выдаёт ошибку: Инструкция по адресу "0x004038c6" обратилась к памяти по адресу "0xaa55aa71". Память не может быть "read".
form2.h Код: #ifndef FORM2_H form2.cpp Код: #include "form2.h" Название: Re: Взаимное управление объектами равноправных классов. Отправлено: lit-uriy от Август 26, 2010, 21:03 >>При обращении из первого класса к объекту второго класса c целью закрытия второго окна
выделенное и является сутью. Ты не обращаешься к объекту и компилятор тебе об этом явно говорит Название: Re: Взаимное управление объектами равноправных классов. Отправлено: Pupil от Август 30, 2010, 08:18 lit-uriy, это да. А как обратиться? Студент ???.
Название: Re: Взаимное управление объектами равноправных классов. Отправлено: lit-uriy от Август 30, 2010, 08:42 >>А как обратиться?
да также как и в CBuilder, всё одно Си++ имя_объекта.имя_поля или имя_указателя_на_объект->имя_поля Название: Re: Взаимное управление объектами равноправных классов. Отправлено: Pupil от Август 30, 2010, 13:24 Согласен, так вопрос в не том:
Есть компонент QLabel. Принадлежность: Класс 1. Имя: label. Во втором классе, пытаясь изменить свойство text компонента QLabel, пишу: ui->label->setText("12345"); Так как ui -это указатель доступа 1-го класса, то система логично выдаёт: 'ui' undeclared Если написать: label->setText("12345"); - система выдаёт: 'label' undeclared. Логично: компонент приналежит классу 1, а класс 2-а, из которого вызывается компонент этого компонента не знает. Делаю так: Код: class2.h Пишу так uiX->label->setText("12345"); -в данном случае от uiX->идёт подсказка автовыбора компонентов - т.е. label класса 1 - доступен для выбора, а для label соответственно доступен метод setText(...). При этом пример компилируется, но при выполнении пример выдаёт ошибку с длинным номером и закрывается. Если обеспечивается видимость в редакторе, что тогда неверно? Почему пример выдаёт ошибку? ??? Название: Re: Взаимное управление объектами равноправных классов. Отправлено: lit-uriy от Август 30, 2010, 16:58 Pupil, ключевая фраза - "как обращаться из одной формы к другой?"
это очень популярный вопрос на этом форуме, для тех, кто плохо знает Си++ и пробовал программировать в стиле Дельфи. Поищи. Люди устали отвечать на один и тот же вопрос Название: Re: Взаимное управление объектами равноправных классов. Отправлено: Pupil от Август 30, 2010, 20:38 Приношу извинения за неинтересный вопрос. Вам труднобыло написать 2-а способа -одной строчкой или функцией - Ваше право. В любом случае всем искренне спасибо. Задачу, Слава Всевышнему, решил.
|