Russian Qt Forum
Ноябрь 01, 2024, 13:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: проверить инициализирован ли объект  (Прочитано 8754 раз)
thechicho
Гость
« : Ноябрь 24, 2011, 21:13 »

подскажите как?
надо
if (не инициализирован) {
    инициализировать
}

что-то вроде http://php.net/manual/en/function.isset.php
« Последнее редактирование: Ноябрь 24, 2011, 21:17 от thechicho » Записан
madRoger
Гость
« Ответ #1 : Ноябрь 24, 2011, 21:31 »

Код:
QLineEdit *le;

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

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

PS. Про isset не прочитал, лень.
Записан
thechicho
Гость
« Ответ #2 : Ноябрь 24, 2011, 21:33 »

угу
ток прога падает у меня почему-то
Записан
madRoger
Гость
« Ответ #3 : Ноябрь 24, 2011, 21:34 »

что в консоли ?
Записан
thechicho
Гость
« Ответ #4 : Ноябрь 24, 2011, 21:34 »

The program has unexpectedly finished.
C:\cpp\proga\debug\proga.exe exited with code -1073741819
Записан
madRoger
Гость
« Ответ #5 : Ноябрь 24, 2011, 21:39 »

сложно, покажи код
Записан
BRE
Гость
« Ответ #6 : Ноябрь 24, 2011, 21:40 »

Не инициализирован, значит присвой ему 0.
Код
C++ (Qt)
QLineEdit *le = 0;
if( !le )
   le = new QLineEdit("text");
 
Записан
thechicho
Гость
« Ответ #7 : Ноябрь 24, 2011, 21:48 »

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

чо за гемморой... почему нельзя тупо проверить, что объект не инициализирован...
Записан
thechicho
Гость
« Ответ #8 : Ноябрь 24, 2011, 21:50 »

// сложно, покажи код
а чо показывать-то. объявлешь объект. не инициализируешь его. проводишь проверку if(!объект). получаешь фейл. все просто.
Записан
BRE
Гость
« Ответ #9 : Ноябрь 24, 2011, 21:51 »

т.е. для того, чтобы работало, надо после удаления каждый раз присваивать 0?
Ага. Если хочешь так проверять, то придется присваивать. Улыбающийся
Записан
thechicho
Гость
« Ответ #10 : Ноябрь 24, 2011, 21:52 »

а как по-другому проверить?
Записан
thechicho
Гость
« Ответ #11 : Ноябрь 24, 2011, 21:56 »

т.е. мне придется создать слот, где удалять объект потока и присваивать ему 0?
wtf?
почему нет  В замешательстве
Код
C++ (Qt)
if (!thread->isSet()) {
   thread = new blablablaThread(this);
   thread->start();
}
Записан
BRE
Гость
« Ответ #12 : Ноябрь 24, 2011, 21:59 »

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

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

Или еще чего придумать можно. Улыбающийся
Записан
thechicho
Гость
« Ответ #13 : Ноябрь 24, 2011, 22:01 »

кк, сенкс Улыбающийся
Записан
BRE
Гость
« Ответ #14 : Ноябрь 24, 2011, 22:02 »

почему нет  В замешательстве
Код
C++ (Qt)
if (!thread->isSet()) {
   thread = new blablablaThread(this);
   thread->start();
}
Почему нет - есть, называются "умные" указатели.
Посмотри на QScopedPointer, QSharedPointer, ...
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.42 секунд. Запросов: 21.