Russian Qt Forum
Ноябрь 25, 2024, 18:12
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Как проверить выделена ли память для QGridLayout?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Как проверить выделена ли память для QGridLayout? (Прочитано 5078 раз)
Hellrider
Гость
Как проверить выделена ли память для QGridLayout?
«
:
Январь 12, 2013, 14:16 »
Есть кнопка триггер, которая переключает QGridLayout-ы , в слотах перед созданием нового лайоута уничтожается старый, но я не могу проверить создан ли старый лайоут.
Как можно проверить выделена ли память для лайоута?
«
Последнее редактирование: Январь 12, 2013, 14:55 от Hellrider
»
Записан
Bepec
Гость
Re: Как проверить выделена ли память для QGridLayout?
«
Ответ #1 :
Январь 12, 2013, 14:58 »
Вызвать метод у него.
Если программа упадёт - значит не выделена.
А по сути - там где его уничтожаешь обнуляй указатель. А потом уже проверяй его на нуль.
Записан
Hellrider
Гость
Re: Как проверить выделена ли память для QGridLayout?
«
Ответ #2 :
Январь 12, 2013, 15:23 »
Цитата: Bepec от Январь 12, 2013, 14:58
Вызвать метод у него.
Если программа упадёт - значит не выделена.
А по сути - там где его уничтожаешь обнуляй указатель. А потом уже проверяй его на нуль.
Но если обнулить указатель перед проверкой на ноль для удаления, то каким образом удаляется выделенная память под него? Вроде указатель после обнуления уже не будет указывать
на память?
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Как проверить выделена ли память для QGridLayout?
«
Ответ #3 :
Январь 12, 2013, 15:25 »
>но я не могу проверить создан ли старый лайоут.
что-то нехорошо в твоей программе устроено.
Компоновщик устанавливается на некий виджет, виджет может иметь только один непосредственный компоновщик.
У виджета всегда можно спросить его компоновщик.
Записан
Юра.
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Как проверить выделена ли память для QGridLayout?
«
Ответ #4 :
Январь 12, 2013, 15:25 »
>>если обнулить указатель перед проверкой на ноль для удаления
А почему "до"?
Записан
Юра.
Hellrider
Гость
Re: Как проверить выделена ли память для QGridLayout?
«
Ответ #5 :
Январь 12, 2013, 16:12 »
Цитата: lit-uriy от Январь 12, 2013, 15:25
>но я не могу проверить создан ли старый лайоут.
что-то нехорошо в твоей программе устроено.
Компоновщик устанавливается на некий виджет, виджет может иметь только один непосредственный компоновщик.
У виджета всегда можно спросить его компоновщик.
Программа сохраняет в настроки при закрытии определенный слот с компоновкой, который будет загружен при запуске, в таком случае нельзя спросить виджет его компоновщик.
А тот же слот отвечает за динамическую смену лайоута во время работы программы.
Цитата: lit-uriy от Январь 12, 2013, 15:25
>>если обнулить указатель перед проверкой на ноль для удаления
А почему "до"?
А как проверить выделена ли память для указателя? if(layout != 0) delete layout; ?
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Как проверить выделена ли память для QGridLayout?
«
Ответ #6 :
Январь 12, 2013, 18:33 »
Цитата: Hellrider от Январь 12, 2013, 16:12
Программа
сохраняет в настроки
при закрытии определенный
слот с компоновкой
что простите?..
Цитата: Hellrider от Январь 12, 2013, 16:12
А как проверить выделена ли память для указателя? if(layout != 0) delete layout; ?
да, только после делит надо еще указателю присвоить 0. а если использовать QPointer<MyClass> вместо MyClass *, то он будет автоматически обнуляться при удалении.
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Hellrider
Гость
Re: Как проверить выделена ли память для QGridLayout?
«
Ответ #7 :
Январь 12, 2013, 19:35 »
Цитата: kambala от Январь 12, 2013, 18:33
Цитата: Hellrider от Январь 12, 2013, 16:12
Программа
сохраняет в настроки
при закрытии определенный
слот с компоновкой
что простите?..
Цитата: Hellrider от Январь 12, 2013, 16:12
А как проверить выделена ли память для указателя? if(layout != 0) delete layout; ?
да, только после делит надо еще указателю присвоить 0. а если использовать QPointer<MyClass> вместо MyClass *, то он будет автоматически обнуляться при удалении.
Ну в смысле в настройках сохраняется значение, которое определяет в котором из слотов расположена нужная компоновка (у меня два слота, которые имеют разную компоновку для
одного виджета).
Пробовал QPointer<QGridLayout*> layout; - вызывало ошибку, мол QPointer не имеет методов, которые в лайоутах определены.
Если делать просто if(layout != 0) delete layout; то даже в не инициилизированном указателе всегда есть мусор и состояние правильно не определить.
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Как проверить выделена ли память для QGridLayout?
«
Ответ #8 :
Январь 12, 2013, 19:37 »
>что простите?..
присоединяюсь к вопросу, что подразумевается под слотами? В терминах Qt, слот - функция-член класса, к которой можно получить доступ через мета-объектную систему Qt
Записан
Юра.
Hellrider
Гость
Re: Как проверить выделена ли память для QGridLayout?
«
Ответ #9 :
Январь 12, 2013, 19:45 »
Цитата: lit-uriy от Январь 12, 2013, 19:37
>что простите?..
присоединяюсь к вопросу, что подразумевается под слотами? В терминах Qt, слот - функция-член класса, к которой можно получить доступ через мета-объектную систему Qt
слот - функция-член класса. то что в public slots:
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Как проверить выделена ли память для QGridLayout?
«
Ответ #10 :
Январь 12, 2013, 20:42 »
правильно QPointer<QGridLayout>, без звездочки (внимательно читать надо)
Цитировать
то даже в не инициилизированном указателе всегда есть мусор и состояние правильно не определить.
естественно. поэтому в конструкторе (ну или где тебе нужно) надо обнулять указатели.
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Hellrider
Гость
Re: Как проверить выделена ли память для QGridLayout?
«
Ответ #11 :
Январь 12, 2013, 20:56 »
Цитата: kambala от Январь 12, 2013, 20:42
правильно QPointer<QGridLayout>, без звездочки (внимательно читать надо)
Цитировать
то даже в не инициилизированном указателе всегда есть мусор и состояние правильно не определить.
естественно. поэтому в конструкторе (ну или где тебе нужно) надо обнулять указатели.
Буду пробовать. Спасибо
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...