Russian Qt Forum

Qt => Вопросы новичков => Тема начата: kip_one от Апрель 25, 2013, 14:00



Название: Использование в нескольких классах одной формы
Отправлено: kip_one от Апрель 25, 2013, 14:00
Каким методом можно использовать в нескольких классах одну форму?Буду рад любым советам.


Название: Re: Использование в нескольких классах одной формы
Отправлено: kambala от Апрель 25, 2013, 16:16
наследованием


Название: Re: Использование в нескольких классах одной формы
Отправлено: Serr500 от Апрель 25, 2013, 16:22
А что значит
Цитировать
использовать в нескольких классах одну форму?
Если экземпляр формы один, а надо с ним работать из разных классов, то передаёте в каждый класс указатель на этот экземпляр. Если же надо несколько экземпляров одной и той же формы, то создаёте класс формы и в каждом классе создаёте её экземпляр, с которым потом класс и работает.


Название: Re: Использование в нескольких классах одной формы
Отправлено: kip_one от Апрель 26, 2013, 00:22
Обращаться к объектам через указатель ui со всех классов.  
Код:
widget.h

#include "ui_widget.h"
#include <QtGui>

class Widget : public QWidget, private Ui::Widget
{
    Q_OBJECT
   
public:
    explicit Widget(QWidget *parent = 0);
};
class MainClass: public QWidget, private Ui::Widget
{
    Q_OBJECT

public:
    explicit MainClass(QWidget *parent = 0);
};
Код:
widget.cpp

#include "widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent)
{
    setupUi(this);
    MainClass main;
}
MainClass::MainClass(QWidget *parent) :
    QWidget(parent)
{
    setupUi(this);
    pushButton->setVisible(false);
    QMessageBox::information(0,"","q");
}

Сообщение показывает, но кнопка на месте.


Название: Re: Использование в нескольких классах одной формы
Отправлено: Serr500 от Апрель 26, 2013, 06:40
А почему кнопка должна исчезнуть? У Вас два класса, каждый из которых содержит свой экземпляр формы (того, что Вы называете ui). В MainClass Вы работаете с экземпляром формы, принадлежащем MainClass, а экземпляр, принадлежащий Widget, который, судя по всему, и отображается на экране, естественно, не изменится. Если в классе MainClass надо работать с формой из Widget, передавайте указатель на форму в конструктор класса и следите, чтобы форма не была разрушена раньше, чем MainClass.

P.S. Похоже, Вы слабо разбираетесь в основах наследования классов.


Название: Re: Использование в нескольких классах одной формы
Отправлено: kip_one от Май 16, 2013, 21:44
Вы правы, внимательно почитав наследование все стало ясно. Нужно было правильно сделать диаграмму классов.