Название: Как можно проверить существует ли виджет? Отправлено: 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…Ну а про валидность указателя какие мысли… |