Qt. использование одного объекта в разных окнах

Модератор: Модераторы разделов

Аватара пользователя
ezheg
Сообщения: 258
Статус: джидай 3-го уровня
ОС: Mac OS X

Qt. использование одного объекта в разных окнах

Сообщение ezheg »

допустим у меня есть описание собственного класса в файле "myclass.h".
как можно создать один объект данного класса и ипользовать его во всех окнах программы?

что я делаю:
пишу в файле mainform.h:

Код: Выделить всё

#include "myclass.h"
...
class MyClass;
...
class mainform : public QMainWindow
{
    Q_OBJECT

public:
...
MyClass *myclass;
...


соответственно, для одного из диалоговых окон, в файле *.ui.h, объявляю
в инклюдах mainform.h, только компилятор все равно ругается

Код: Выделить всё

'myclass' undeclared (first use this function)
Спасибо сказали:
qb_developer
Сообщения: 18

Re: Qt. использование одного объекта в разных окнах

Сообщение qb_developer »

Попробуй передавать ссылку на myclass в конструкторе диалога.
вроде

Код: Выделить всё

MyDialog(MyClass *cl, QWidget* parent...)


Ты обращаешься к myclass в диалоге напрямую?
Необходимо обращаться через экземпляр объекта mainfrom.

Попробуй объявить
MyClass *myclass;
вне класса mainform
Спасибо сказали:
Аватара пользователя
ezheg
Сообщения: 258
Статус: джидай 3-го уровня
ОС: Mac OS X

Re: Qt. использование одного объекта в разных окнах

Сообщение ezheg »

к диалогу я обращаюсь из главной формы - вот так:

Код: Выделить всё

MyDialog mydialog(this);
mydialog.exec();


а для диалога я уже пишу

Код: Выделить всё


#include "mainform.h"
...
myclas.bla-bla-bla();


Необходимо обращаться через экземпляр объекта mainfrom.

это как?в смысле я понял, но не понял как это выглядит в буквах..:)

Попробуй объявить
MyClass *myclass;
вне класса mainform

вот у меня такая же идея была, но где его можно обявить?
создать файл myclass.cpp с конструктором, а в инклюдах просто объявить "myclass.h" и отовсюду обращаться к нему просто - myclass ???
Спасибо сказали:
qb_developer
Сообщения: 18

Re: Qt. использование одного объекта в разных окнах

Сообщение qb_developer »

1.

Необходимо обращаться через экземпляр объекта mainfrom.

это как?в смысле я понял, но не понял как это выглядит в буквах..

Код: Выделить всё

  ((mainform*)parent)->myclass


2.
вот у меня такая же идея была, но где его можно обявить?

в mainform.h

советаю делать по второму варианту - гемора будет чуть меньше
Спасибо сказали:
Аватара пользователя
ezheg
Сообщения: 258
Статус: джидай 3-го уровня
ОС: Mac OS X

Re: Qt. использование одного объекта в разных окнах

Сообщение ezheg »

ты же сам в первом сообщении посоветовал объявить myclass за пределами mainform.h, а теперь пишешь - mainform... :blink:
Спасибо сказали:
qb_developer
Сообщения: 18

Re: Qt. использование одного объекта в разных окнах

Сообщение qb_developer »

ты же сам в первом сообщении посоветовал объявить myclass за пределами mainform.h, а теперь пишешь - mainform...


я говорил за пределами класса
класс != заголовочный файл
короче, код mainform.h:

Код: Выделить всё

#include "myclass.h"
...
MyClass *myclass;
...
class mainform : public QMainWindow
{
  Q_OBJECT
...
}

так возможно делать
Спасибо сказали:
Аватара пользователя
ezheg
Сообщения: 258
Статус: джидай 3-го уровня
ОС: Mac OS X

Re: Qt. использование одного объекта в разных окнах

Сообщение ezheg »

короче, если объявить его вне класса mainform, то вот такую байду выдает:

Код: Выделить всё

mainform.o(.bss+0x0): multiple definition of `myclass'
main.o(.bss+0x0): first defined here
moc_mainform.o(.bss+0x0): multiple definition of `myclass'
main.o(.bss+0x0): first defined here
collect2: ld returned 1 exit status
make: *** [client] Ошибка 1


причем здесь multiple definition - в упор не понимаю, я смотрел, обявление только в mainform.h и больше нигде! :blink:
Спасибо сказали:
Аватара пользователя
nercus
Сообщения: 150

Re: Qt. использование одного объекта в разных окнах

Сообщение nercus »

все правильно. переменная myclass стала частью более чем одного объектника.
в mainform.h:
extern MyClass *myclass;
в mainform.cpp (или .c, или как там в QtDesigner то что объектнику соответствует зовется):
MyClass *myclass;
2.6.14-gentoo-r5
kde-3.5.0 | openbox-3.2
Deep Purple | Rob Zombie | Led Zeppelin | ДДТ
Спасибо сказали:
Аватара пользователя
oav
Бывший модератор
Сообщения: 296

Re: Qt. использование одного объекта в разных окнах

Сообщение oav »

(piton3000 @ Воскресенье, 27 Марта 2005, 1:55) писал(а):допустим у меня есть описание собственного класса в файле "myclass.h".
как можно создать один объект данного класса и ипользовать его во всех окнах программы?


Используй стандартный паттерн Синглетон, в реализации, скажем Г.Саттера:

Код: Выделить всё

class MyGlobalClass
{
public:
        static MyGlobalClass* instance()
        {
                  static MyGlobalClass* pInst = 0;
                   if( !pInst )
                        pInst = new MyGlobalClass;
                   return MyGlobalClass;
        }

        void SomeMethod()const;
private:
        MyGlobalClass();
        MyGlobalClass( MyGlobalClass& );
};


Использование:

Код: Выделить всё

          MyGlobalClass::instance()->SomeMethod();


ps. для изучения вопросов на тему паттернов проектирования :
http://www.ozon.ru/context/detail/id/115172/


oav добавил в 28.03.2005 10:50

упс, реализация не Саттера, а Майерса, конечно :)
Спасибо сказали:
Аватара пользователя
ezheg
Сообщения: 258
Статус: джидай 3-го уровня
ОС: Mac OS X

Re: Qt. использование одного объекта в разных окнах

Сообщение ezheg »

(nercus @ Понедельник, 28 Марта 2005, 1:10) писал(а):все правильно. переменная myclass стала частью более чем одного объектника.
в mainform.h:
extern MyClass *myclass;
в mainform.cpp (или .c, или как там в QtDesigner то что объектнику соответствует зовется):
MyClass *myclass;


опа!..Вот так вроде заработало, но буду дальше проверять.. B)

2 oav
я пока не очень понял, но видимо это поможет, спасибо за наводку:) Буду разбираться (возможно книга в сети есть)..
Спасибо сказали: