Название: доступ к объекту MainWindow Отправлено: DDDIM от Июля 13, 2011, 12:41 бъюсь со следующей турдностью:
пытаюсь получить доступ к переменной объекта главного окна из других окон. видимо недостаточно понимаю как работает препроцессор, а именно #include. работаю на qt creator прошу помощи по этому вопросу. код: main.cpp Код: #include <QtGui/QApplication> mainwindow.h Код: #ifndef MAINWINDOW_H form.h Код: #ifndef FORM_H form.cpp Код: #include "form.h" компилятор выдает ошибку multiple definition of 'w'; Название: Re: доступ к объекту MainWindow Отправлено: kambala от Июля 13, 2011, 13:16 форма Form создается в каком-то методе главного окна я так понимаю, вот там и менять i. к переменной w ты никак не получишь доступ кроме как в функции main()
Название: Re: доступ к объекту MainWindow Отправлено: lit-uriy от Июля 13, 2011, 13:17 >>w.show(); // объявление MainWindow w; вынес в mainwindow.h
категорически зря. Название: Re: доступ к объекту MainWindow Отправлено: DDDIM от Июля 13, 2011, 13:32 форма Form создается в каком-то методе главного окна я так понимаю, вот там и менять i. к переменной w ты никак не получишь доступ кроме как в функции main() это был простейший пример того что мне надо сделать. в реальной программе нужно получать доступ к главному окну из всех его дочерних окон. сигналы и слоты не подходят. уже не первый день ломаю над этим голову. приложение должно быть построено так, чтобы все виждеты(пусть, не все, но многие) могли получать доступ ко всему классу главного окна. должно быть простое решение этого вопроса. говорить что это не правильно с точки зрения правильного программирования и т.п. не обязательно. просто кто знает подскажите пожалуйста решение. ??? Название: Re: доступ к объекту MainWindow Отправлено: DDDIM от Июля 13, 2011, 13:47 >>w.show(); // объявление MainWindow w; вынес в mainwindow.h категорически зря. почему зря? если объявление w останется в main(...){...} то этот объект не увидят другие классы Название: Re: доступ к объекту MainWindow Отправлено: LisandreL от Июля 13, 2011, 13:53 extern MainWindow w; - в .h
MainWindow w; - в .cpp И будет вам полный Delphi Style. ;) Название: Re: доступ к объекту MainWindow Отправлено: kambala от Июля 13, 2011, 14:12 может тогда синглтон использовать для главного окна?
Название: Re: доступ к объекту MainWindow Отправлено: Пантер от Июля 13, 2011, 14:18 1. Используй сигналы/слоты
2. Передавай в Form указатель на MainWindow 3. Еще много способов Название: Re: доступ к объекту MainWindow Отправлено: DDDIM от Июля 13, 2011, 14:29 extern MainWindow w; - в .h MainWindow w; - в .cpp И будет вам полный Delphi Style. ;) последовал вашему совету. не хочет работать. main.cpp Код: #include <QtGui/QApplication> mainwindow.h Код: #ifndef MAINWINDOW_H mainwindow.cpp Код: #include "mainwindow.h" form.h Код: #ifndef FORM_H form.cpp Код: #include "form.h" оно и не должно работать. потому что два объявления w. одно в mainwindow.h другое в form.cpp. если же поставить эти объявления в mainwindow.h и mainwindow.cpp, то программа сама завершается сразу после старта. возможно, я недопонял куда добавлять предложенные объявления. не могли бы расшифровать на моем коде например. Название: Re: доступ к объекту MainWindow Отправлено: Пантер от Июля 13, 2011, 14:31 DDDIM, тебе нужно сначала поучить с++, а потом уже за Qt браться. Искренне советую.
Название: Re: доступ к объекту MainWindow Отправлено: DDDIM от Июля 13, 2011, 14:35 1. Используй сигналы/слоты 2. Передавай в Form указатель на MainWindow 3. Еще много способов спасибо за советы 1-2. третий не помог))) мне бы хоть один сопсоб осуществить. второй способ я пытался осуществить, но как уже писал, по-видимому, не могу врубиться как работает #include. если вас не затруднит, можно пример на моем коде? согласен, изучение c++ в процессе. на c писал большую программу, думал быстро адаптируюсь. Название: Re: доступ к объекту MainWindow Отправлено: Пантер от Июля 13, 2011, 14:37 Тебе лучше посмотреть примеры и туториалы, которые поставляются вместе с Qt. А еще лучше - почитай в книжке.
Название: Re: доступ к объекту MainWindow Отправлено: DDDIM от Июля 13, 2011, 14:39 может тогда синглтон использовать для главного окна? спасибо. впервые вижу этот термин. начал читать Название: Re: доступ к объекту MainWindow Отправлено: Пантер от Июля 13, 2011, 14:40 может тогда синглтон использовать для главного окна? спасибо. впервые вижу этот термин. начал читать Название: Re: доступ к объекту MainWindow Отправлено: DDDIM от Июля 13, 2011, 15:33 extern MainWindow w; - в .h MainWindow w; - в .cpp И будет вам полный Delphi Style. ;) спасибо заработало. моя невнимательность. для создания объекта в main.cpp надо было использовать Код:
при этом extern MainWindow *w; - в .h MainWindow *w; - в .cpp - иначе уже тут создается объект и программа вылетает с ошибкой Код: QWidget: Must construct a QApplication before a QPaintDevice Название: Re: доступ к объекту MainWindow Отправлено: lit-uriy от Июля 14, 2011, 19:20 >>почему зря?
потому что так не программируют в принципе (заисключением богландов). в заголовочниках не следует создавать объекты. Богландам так было легче генерить их Сибилдеровские хахаряхи из дельфийского кода. |