Russian Qt Forum

Qt => Вопросы новичков => Тема начата: thechicho от Ноябрь 24, 2011, 21:13



Название: проверить инициализирован ли объект
Отправлено: thechicho от Ноябрь 24, 2011, 21:13
подскажите как?
надо
if (не инициализирован) {
    инициализировать
}

что-то вроде http://php.net/manual/en/function.isset.php (http://php.net/manual/en/function.isset.php)


Название: Re: проверить инициализирован ли объект
Отправлено: madRoger от Ноябрь 24, 2011, 21:31
Код:
QLineEdit *le;

if(!le) le = new QLineEdit("text");

Наверно так ?!

PS. Про isset не прочитал, лень.


Название: Re: проверить инициализирован ли объект
Отправлено: thechicho от Ноябрь 24, 2011, 21:33
угу
ток прога падает у меня почему-то


Название: Re: проверить инициализирован ли объект
Отправлено: madRoger от Ноябрь 24, 2011, 21:34
что в консоли ?


Название: Re: проверить инициализирован ли объект
Отправлено: thechicho от Ноябрь 24, 2011, 21:34
The program has unexpectedly finished.
C:\cpp\proga\debug\proga.exe exited with code -1073741819


Название: Re: проверить инициализирован ли объект
Отправлено: madRoger от Ноябрь 24, 2011, 21:39
сложно, покажи код


Название: Re: проверить инициализирован ли объект
Отправлено: BRE от Ноябрь 24, 2011, 21:40
Не инициализирован, значит присвой ему 0.
Код
C++ (Qt)
QLineEdit *le = 0;
if( !le )
   le = new QLineEdit("text");
 


Название: Re: проверить инициализирован ли объект
Отправлено: thechicho от Ноябрь 24, 2011, 21:48
это поток. и нужно проверять каждый раз, чтобы новый не создавать. в конструкторе 0 присвоил, в процессе поток удалился. проверка накрылась медным тазом.
т.е. для того, чтобы работало, надо после удаления каждый раз присваивать 0?
как это правильно делается?
у меня удаляется сейчас пока так:
Код
C++ (Qt)
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));

чо за гемморой... почему нельзя тупо проверить, что объект не инициализирован...


Название: Re: проверить инициализирован ли объект
Отправлено: thechicho от Ноябрь 24, 2011, 21:50
// сложно, покажи код
а чо показывать-то. объявлешь объект. не инициализируешь его. проводишь проверку if(!объект). получаешь фейл. все просто.


Название: Re: проверить инициализирован ли объект
Отправлено: BRE от Ноябрь 24, 2011, 21:51
т.е. для того, чтобы работало, надо после удаления каждый раз присваивать 0?
Ага. Если хочешь так проверять, то придется присваивать. :)


Название: Re: проверить инициализирован ли объект
Отправлено: thechicho от Ноябрь 24, 2011, 21:52
а как по-другому проверить?


Название: Re: проверить инициализирован ли объект
Отправлено: thechicho от Ноябрь 24, 2011, 21:56
т.е. мне придется создать слот, где удалять объект потока и присваивать ему 0?
wtf?
почему нет  :-\
Код
C++ (Qt)
if (!thread->isSet()) {
   thread = new blablablaThread(this);
   thread->start();
}


Название: Re: проверить инициализирован ли объект
Отправлено: BRE от Ноябрь 24, 2011, 21:59
а как по-другому проверить?
Тебе виднее должно быть...
Как вариант... не разрушать объект thread после завершения, ну и не создавать его заново. Нужна нить запустил, она отработала и ждет следующего запуска. нужно будет проверять работает/не работает:
bool QThread::isRunning () const
bool QThread::isFinished () const

Или можно написать свой слот, который подключать на сигнал finished и в нем вызывать deleteLater и следом занулять thread.

Или еще чего придумать можно. :)


Название: Re: проверить инициализирован ли объект
Отправлено: thechicho от Ноябрь 24, 2011, 22:01
кк, сенкс :)


Название: Re: проверить инициализирован ли объект
Отправлено: BRE от Ноябрь 24, 2011, 22:02
почему нет  :-\
Код
C++ (Qt)
if (!thread->isSet()) {
   thread = new blablablaThread(this);
   thread->start();
}
Почему нет - есть, называются "умные" указатели.
Посмотри на QScopedPointer, QSharedPointer, ...


Название: Re: проверить инициализирован ли объект
Отправлено: SASA от Ноябрь 25, 2011, 16:04
т.е. для того, чтобы работало, надо после удаления каждый раз присваивать 0?

Не надо. храни указатель в QPointer. Как только объект удалился - он сам сбросится в 0.


Название: Re: проверить инициализирован ли объект
Отправлено: thechicho от Ноябрь 25, 2011, 18:02
работает, сенкс