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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как можно проверить существует ли виджет?  (Прочитано 7942 раз)
Alex
Гость
« : Сентябрь 24, 2008, 22:17 »

Есть указатель QWidget *ptr. Нужно проверить существует ли виджет на который указывает ptr или был удален (закрыт).
Записан
Karl-Philipp
Гость
« Ответ #1 : Сентябрь 24, 2008, 22:34 »

Q_ASSERT(ptr != 0);?  Улыбающийся
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #2 : Сентябрь 24, 2008, 23:27 »

удалён != закрыт. Если поставить на виджет атрибут Qt::WA_DeleteOnClose, то можно отслеживать сигнал void destroyed ( QObject * obj = 0 ), и в слоте-приёмнике обнулять указатель (ptr = 0). Таким образом, в любой момент времени можно проверить виджет на существование с помощью простого if(ptr).
Записан
ритт
Гость
« Ответ #3 : Сентябрь 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.
Записан
zavulon
Гость
« Ответ #4 : Сентябрь 25, 2008, 16:31 »

Да, стандартное решение - это защищенные указатели QPointer. Классная вещь.
Записан
SASA
Гость
« Ответ #5 : Сентябрь 26, 2008, 13:59 »

Вопрос в тему.
А нет ли в Qt функции проверки на валидноость указателя? Помнится, я когда-то использовал подобную функцию из WIN API.
QPointer работает только с указателями на QObject, а как быть в остальных случаях?
Записан
ритт
Гость
« Ответ #6 : Сентябрь 26, 2008, 14:09 »

а зачем другие случаи? нужен безопасный указатель - наследуемся от куобжект...
Записан
SASA
Гость
« Ответ #7 : Сентябрь 26, 2008, 14:16 »

Цитировать
а зачем другие случаи? нужен безопасный указатель - наследуемся от куобжект...
По-моему в STL есть умные указатели работающие со всем. Может в Qt есть аналоги? Но видно только QPointer…

Ну а про валидность указателя какие мысли…
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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