Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ Qt как проверить, создан виджет или нет ? / 10 сообщений из 10, страница 1 из 1
07.02.2017, 12:14
    #39399932
olegov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ Qt как проверить, создан виджет или нет ?
Вроде бы всё просто

QWidget *w;


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

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

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

Делаю так

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

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

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

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

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

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

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

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

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

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

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

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


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