Russian Qt Forum

Qt => Общие вопросы => Тема начата: Alex от Сентябрь 24, 2008, 22:17



Название: Как можно проверить существует ли виджет?
Отправлено: Alex от Сентябрь 24, 2008, 22:17
Есть указатель QWidget *ptr. Нужно проверить существует ли виджет на который указывает ptr или был удален (закрыт).


Название: Re: Как можно проверить существует ли виджет?
Отправлено: Karl-Philipp от Сентябрь 24, 2008, 22:34
Q_ASSERT(ptr != 0);?  :)


Название: Re: Как можно проверить существует ли виджет?
Отправлено: Alex Custov от Сентябрь 24, 2008, 23:27
удалён != закрыт. Если поставить на виджет атрибут Qt::WA_DeleteOnClose, то можно отслеживать сигнал void destroyed ( QObject * obj = 0 ), и в слоте-приёмнике обнулять указатель (ptr = 0). Таким образом, в любой момент времени можно проверить виджет на существование с помощью простого if(ptr).


Название: Re: Как можно проверить существует ли виджет?
Отправлено: ритт от Сентябрь 25, 2008, 00:15
Цитировать
The QPointer class is a template class that provides guarded pointers to QObjects.
A guarded pointer, QPointer<T>, behaves like a normal C++ pointer T *, except that it is automatically set to 0 when the referenced object is destroyed (unlike normal C++ pointers, which become "dangling pointers" in such cases). T must be a subclass of QObject.
Guarded pointers are useful whenever you need to store a pointer to a QObject that is owned by someone else, and therefore might be destroyed while you still hold a reference to it. You can safely test the pointer for validity.


Название: Re: Как можно проверить существует ли виджет?
Отправлено: zavulon от Сентябрь 25, 2008, 16:31
Да, стандартное решение - это защищенные указатели QPointer. Классная вещь.


Название: Re: Как можно проверить существует ли виджет?
Отправлено: SASA от Сентябрь 26, 2008, 13:59
Вопрос в тему.
А нет ли в Qt функции проверки на валидноость указателя? Помнится, я когда-то использовал подобную функцию из WIN API.
QPointer работает только с указателями на QObject, а как быть в остальных случаях?


Название: Re: Как можно проверить существует ли виджет?
Отправлено: ритт от Сентябрь 26, 2008, 14:09
а зачем другие случаи? нужен безопасный указатель - наследуемся от куобжект...


Название: Re: Как можно проверить существует ли виджет?
Отправлено: SASA от Сентябрь 26, 2008, 14:16
Цитировать
а зачем другие случаи? нужен безопасный указатель - наследуемся от куобжект...
По-моему в STL есть умные указатели работающие со всем. Может в Qt есть аналоги? Но видно только QPointer…

Ну а про валидность указателя какие мысли…