Russian Qt Forum

Qt => Общие вопросы => Тема начата: Switch74 от Апрель 23, 2010, 09:08



Название: Потомки и родители (иерархия объектов)
Отправлено: Switch74 от Апрель 23, 2010, 09:08
 Здравствуйте.
Совсем запарился, не могу разобраться помогите плиз???

меня интересует возможность выставления иерархии объектов, например
Код:
class init : public QObject
{
Q_OBJECT
public:
    explicit init(QObject *parent = 0);
    int i;
};

class window : public QMainWindow
{
Q_OBJECT
public:
    explicit window();
};

init::init(QObject *parent) :
    QObject(parent)
{
    i = 1;
}

window::window()
{
    //знаю, что parent у меня не определён, в этом то и проблемма, как правильно сделать так,
 чтобы из второго объекта можно было читать/изменять переменные другого, и выполнять его методы
 в процессе выполнения программы...
    parent->i = 2;
}


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
    init objectMain;

    window windowMain;

    return a.exec();
}



Название: Re: Потомки и родители (иерархия объектов)
Отправлено: SABROG от Апрель 23, 2010, 09:17
Варианты:
* передать указатель на init, сделать публичные методы для изменения переменных
* сделать init другом (friend) для window
* QObject::setParent()


Название: Re: Потомки и родители (иерархия объектов)
Отправлено: Switch74 от Апрель 23, 2010, 09:26
QObject::setParent() и передача указателя на init выдаёт у мя схожую ошибку
пробовал и с QObject и QWidget
Код:
error: no matching function for call to 'window::window(init&)'
note: candidates are: window::window(QWidget*)
note:                 window::window(const window&)
Про друга не знаю как сделать, ща поищу.
 Можете модифицировать мой window для передачи указателя :-\


Название: Re: Потомки и родители (иерархия объектов)
Отправлено: SABROG от Апрель 23, 2010, 13:39
Код
C++ (Qt)
class window : public QMainWindow
{
   Q_OBJECT
public:
   explicit window(QObject* parent = 0);
};
...
window::window(QObject* parent) : QMainWindow(parent)
{
}
 
int main(int argc, char* argv[])
{
   QCoreApplication a(argc, argv);
   init objectMain;
 
   window windowMain(&objectMain);
 
   return a.exec();
}