powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ Qt как проверить, создан виджет или нет ?
10 сообщений из 10, страница 1 из 1
C++ Qt как проверить, создан виджет или нет ?
    #39399932
olegov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде бы всё просто

QWidget *w;


В какой-то момент являем виджет на свет
w->show();

В какой-то момент убиваем
w->close();

При этом, в приложении есть необходимость, при определенных действиях проверить, каково сейчас состояние это виджета.

Делаю так

if (w!=NULL){
Что-то тут делаем
}

Пробовал и так
if (w!=0){
Что-то тут делаем
}

Под MAC OS всё нормально работает. Под Windows крашится приложение. Просто напросто проверка на существование if (w!=0) не проходит и выполняется код из "Что-то тут делаем" над несуществующим объектам.

Как это решается ?

Пишу как умею. Дорого, долго...
...
Рейтинг: 0 / 0
C++ Qt как проверить, создан виджет или нет ?
    #39399935
olegov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного не до конца код привел...
когда являем на свет

w=new QWidget(this);
w->show();
...
Рейтинг: 0 / 0
C++ Qt как проверить, создан виджет или нет ?
    #39399939
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegov,

читаем учебники по с++ а)
по Qt б)

про жизненный цикл объектов.

Указатели сами по себе не обнуляются.
...
Рейтинг: 0 / 0
C++ Qt как проверить, создан виджет или нет ?
    #39399952
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegov,

1. Использовать сырые указатели -- плохая практика.
2. Используй QPointer<QWidget> w. Если у виджета выставлен флаг Qt::WA_DeleteOnClose, тогда после вызовые w->close(), w.isNull() должен вернуть true.
Пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
QPointer<QWidget> w( new QWidget(... ) );
...
w->show();
...
w->close();

if (!w.isNull()){
//Что-то тут делаем
}
...
Рейтинг: 0 / 0
C++ Qt как проверить, создан виджет или нет ?
    #39399953
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegovВ какой-то момент убиваем
w->close();1. QWidget::close прибивает объект, только если у него выставлен флаг Qt::WA_DeleteOnClose
2. QWidget::close возвращает результат типа bool
3. Под MAC OS "всё работает" в релизной сборке? Боюсь, тут могут ждать неожиданности
...
Рейтинг: 0 / 0
C++ Qt как проверить, создан виджет или нет ?
    #39399954
olegov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl, спасибо ! Прям помогло. Одно не понятно, если нет желания отвечать, на кой вообще что-то писать ? Для галочки ?
...
Рейтинг: 0 / 0
C++ Qt как проверить, создан виджет или нет ?
    #39399957
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegovSiemargl, спасибо ! Прям помогло. Одно не понятно, если нет желания отвечать, на кой вообще что-то писать ? Для галочки ?С твоим уровнем понимания нет смысла давать готовый ответ. Потому что ты упадешь на следующем же шаге.
...
Рейтинг: 0 / 0
C++ Qt как проверить, создан виджет или нет ?
    #39399958
olegov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekZ, Ага, понял. Спасибо !
...
Рейтинг: 0 / 0
C++ Qt как проверить, создан виджет или нет ?
    #39399960
olegov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych, Точно, так и получилось. В релизе и под Мак крашится.
...
Рейтинг: 0 / 0
C++ Qt как проверить, создан виджет или нет ?
    #39400008
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegov
Под MAC OS всё нормально работает. Под Windows крашится приложение. Просто напросто проверка на существование if (w!=0) не проходит и выполняется код из "Что-то тут делаем" над несуществующим объектам.

Как это решается ?

Пишу как умею. Дорого, долго...

Это другая проблема, никак не связанная с проверкой существования виджета.
Само существование виджета у тебя проверяется правильно.
Но у тебя в коде есть другая проблема, которая не проявляется на MAC OS, но вылезает на Win.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ Qt как проверить, создан виджет или нет ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]