Russian Qt Forum

Qt => Вопросы новичков => Тема начата: demaker от Июнь 05, 2012, 15:26



Название: Доступ к элементам объета (ООП)
Отправлено: demaker от Июнь 05, 2012, 15:26
Помогите понять ???

У меня есть форма с кнопкой- объект классаTForm.

По нажатию кнопки на  форме создается еще одна форма, но не  на TForm а отдельно, назавем его объект threadForm класса ThreadForm.
 
При создании threadForm автоматически создается объект класса QThread, а в нем таймер...

При создании threadForm указатель на этот объект заносится в список QList<ThreadForm*>m_threadform.
QList<ThreadForm*>m_threadform является глобальной переменной внутри класса TForm

Я хочу, чтобы при закрытии окна threadForm объект удалялся из списка.



 


Название: Re: Доступ к элементам объета (ООП)
Отправлено: mutineer от Июнь 05, 2012, 15:33
Доступ к списку в другом файле проекта не могу получить.

Ну если не можешь, значит делаешь неправильно что-то)))


Название: Re: Доступ к элементам объета (ООП)
Отправлено: demaker от Июнь 05, 2012, 15:48
Ну а по конкретнее :)

список создается в объекте класса TForm

class TForm : public QWidget
{
    Q_OBJECT

public:
    QList<ThreadForm*> m_threadform;
    int cnt_startValue;

public:
    TForm(QWidget *parent = 0);
    ~TForm();

public slots:
   oid startTime();
   void get_startValue(QString);

protected:
   void closeEvent(QCloseEvent* event);

private:
    Ui::TFormClass ui;
};

вот

и по нажатию клавиши  connect(ui.pushButton,SIGNAL(clicked()),this,SLOT(startTime()));

void TForm::startTime()
{
   ThreadForm* simpleForm = new ThreadForm(cnt_startValue);
   m_threadform.append(simpleForm);
}

а когда я отдельно закрою один из ThreadForm* simpleForm он должен удалиться из списка
 :)

но ???


Название: Re: Доступ к элементам объета (ООП)
Отправлено: mutineer от Июнь 05, 2012, 15:51
Если этот твой виджет удаляется при закрытии, то подпишись на его сигнал destroyed() и удаляй указатель из списка


QList<ThreadForm*>m_threadform является глобальной переменной внутри класса TForm
Не является он глобальной переменной


Название: Re: Доступ к элементам объета (ООП)
Отправлено: Kurles от Июнь 05, 2012, 15:56
смотри в сторону сигнала
Код
C++ (Qt)
void QObject::destroyed ( QObject * obj = 0 ) [signal]


Название: Re: Доступ к элементам объета (ООП)
Отправлено: Alex_C от Июнь 05, 2012, 16:49
Я хочу, чтобы при закрытии окна threadForm объект удалялся из списка.

setAttribute(Qt::WA_DeleteOnClose);

и далее как уже сказано выше сигнал по destroyed.


Название: Re: Доступ к элементам объета (ООП)
Отправлено: mutineer от Июнь 05, 2012, 16:50
Я хочу, чтобы при закрытии окна threadForm объект удалялся из списка.

setAttribute(Qt::WA_DeleteOnClose);


Как это поможет удалить указатель из списка?


Название: Re: Доступ к элементам объета (ООП)
Отправлено: Alex_C от Июнь 05, 2012, 17:01
Как это поможет удалить указатель из списка?

Читаем вопрос: "как при закрытии удалить" - 1 часть - ответ - setAttribute(Qt::WA_DeleteOnClose);
Судя по TForm - человек перешел с Дельфи/Билдера. Там в событии OnClose указывалось Action := caFree;
Теперь при закрытии окно будет уничтожаться.
Значит будет генериться сигнал destroyed - который и будет отловлен и обработан нужным образом.


Название: Re: Доступ к элементам объета (ООП)
Отправлено: mutineer от Июнь 05, 2012, 17:06
Ну с припиской да, поможет


Название: Re: Доступ к элементам объета (ООП)
Отправлено: demaker от Июнь 06, 2012, 10:29
QList<ThreadForm*>m_threadform является глобальной переменной внутри класса TForm
Не является он глобальной переменной
[/quote]


Оговорился,извините, видимой во всех метода данного объекта  :)