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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с QIcon  (Прочитано 8681 раз)
dr_Begemot
Гость
« : Апрель 28, 2010, 13:40 »

Есть такая проблема:

Добавляю иконку на кнопку:
Код:
zoomButton = new QToolButton(this);

QIcon iconZoomButton;
iconZoomButton.addFile(QString::fromUtf8(":/images/zoom/zoom.png"), QSize(), QIcon::Normal, QIcon::Off);

zoomButton->setIcon( iconZoomButton );

Иконка на кнопке появляется, все ок, но по завершению работы программы фиксятся утечки памяти...
Если писать так:
Код:
zoomButton = new QToolButton(this);

QIcon iconZoomButton;
//iconZoomButton.addFile(QString::fromUtf8(":/images/zoom/zoom.png"), QSize(), QIcon::Normal, QIcon::Off);

zoomButton->setIcon( iconZoomButton );
то утечек нет, но и иконки соответственно тоже нет...

Я так понимаю надо что-то где-то освободить... Что?

Спасибо)
Записан
crossly
Гость
« Ответ #1 : Апрель 28, 2010, 13:46 »

каким образом утечку определили??
Записан
dr_Begemot
Гость
« Ответ #2 : Апрель 28, 2010, 13:47 »

каким образом утечку определили??

В Visual Studio пишет)
Записан
crossly
Гость
« Ответ #3 : Апрель 28, 2010, 13:51 »

что конкретно пишет??
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Апрель 28, 2010, 13:55 »

Цитировать
...но по завершению работы программы фиксятся утечки памяти...
Qt заводит некоторое количество статических объектов, деструкторы которых не отрабатывают при завершении программы.
Это нормально и не стоит на этом заморачиваться.
Записан

Qt 5.11/4.8.7 (X11/Win)
dr_Begemot
Гость
« Ответ #5 : Апрель 28, 2010, 13:59 »

Цитировать
...но по завершению работы программы фиксятся утечки памяти...
Qt заводит некоторое количество статических объектов, деструкторы которых не отрабатывают при завершении программы.
Это нормально и не стоит на этом заморачиваться.

Как это связано именно с вызовом iconZoomButton.addFile(QString::fromUtf8(":/images/zoom/zoom.png"), QSize(), QIcon::Normal, QIcon::Off);Непонимающий
Ведь без нее все ок.
Записан
dr_Begemot
Гость
« Ответ #6 : Апрель 28, 2010, 14:01 »

что конкретно пишет??

Код:
...
Detected memory leaks!
Dumping objects ->
{54409} normal block at 0x0132C840, 24 bytes long.
 Data: <                > 00 CD CD CD 00 00 00 00 00 00 00 00 00 00 00 00
{54408} normal block at 0x0130E968, 4 bytes long.
 Data: <@ 2 > 40 C8 32 01
{54362} normal block at 0x0129DD40, 24 bytes long.
 Data: <                > 00 CD CD CD 00 00 00 00 00 00 00 00 00 00 00 00
{54361} normal block at 0x012F6378, 4 bytes long.
 Data: <@ ) > 40 DD 29 01
{54360} normal block at 0x01297AB0, 24 bytes long.
 Data: <                > 00 CD CD CD 00 00 00 00 00 00 00 00 00 00 00 00
{54359} normal block at 0x0132D4E0, 4 bytes long.
 Data: < z) > B0 7A 29 01
{54350} normal block at 0x01296778, 24 bytes long.
 Data: <                > 00 CD CD CD 00 00 00 00 00 00 00 00 00 00 00 00
{54349} normal block at 0x0132B720, 4 bytes long.
 Data: <xg) > 78 67 29 01
{54337} normal block at 0x01296F18, 24 bytes long.
 Data: <                > 00 CD CD CD 00 00 00 00 00 00 00 00 00 00 00 00
{54336} normal block at 0x01292D00, 4 bytes long.
 Data: < o) > 18 6F 29 01
{52070} normal block at 0x012EDEB0, 80 bytes long.
 Data: < .(g  2     `h8g> D8 2E 28 67 98 D4 32 01 00 00 00 00 60 68 38 67
{52069} normal block at 0x0132D498, 12 bytes long.
 Data: < W    .  W  > B0 57 8B 01 B0 DE 2E 01 9C 57 8B 01
{52015} normal block at 0x0132C258, 80 bytes long.
 Data: < .(g  2     `h8g> D8 2E 28 67 18 D1 32 01 00 00 00 00 60 68 38 67
{52014} normal block at 0x0132D118, 12 bytes long.
...
 и так далее, полностью сообщение не влезает в пост :)
...
Object dump complete.
The program '[11984] TestATL.exe: Native' has exited with code 2 (0x2).
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Апрель 28, 2010, 14:10 »

Цитировать
Как это связано именно с вызовом iconZoomButton.addFile(QString::fromUtf8(":/images/zoom/zoom.png"), QSize(), QIcon::Normal, QIcon::Off);
Ведь без нее все ок.
Если честно, то даже нет желания объяснять.
Вам же сказали - не заморачивайтесь. Не нужно искать проблему там, где её нет.
Записан

Qt 5.11/4.8.7 (X11/Win)
dr_Begemot
Гость
« Ответ #8 : Апрель 28, 2010, 14:21 »

Цитировать
Как это связано именно с вызовом iconZoomButton.addFile(QString::fromUtf8(":/images/zoom/zoom.png"), QSize(), QIcon::Normal, QIcon::Off);
Ведь без нее все ок.
Если честно, то даже нет желания объяснять.
Вам же сказали - не заморачивайтесь. Не нужно искать проблему там, где её нет.

Уважаемый, давайте без фраз "вам же сказали" итд, ок?
Откуда вы так уверены, что данная утечка связанна именно с тем, что Qt заводит некоторое количество статических объектов, деструкторы которых не отрабатывают при завершении программы??? Такими темпами про любую утечку можно сказать так)

Если Вам при программировании не критично, что память кушается, я за вас рад, в моем случае постоянное увеличение памяти на неск килобайт не в радость, а именно так и происходит если сделать несколько циклов.
Записан
jack_r
Гость
« Ответ #9 : Апрель 28, 2010, 14:44 »

Попробуйте использовать анонимные переменные. Вместо:
Код:
zoomButton = new QToolButton(this);

QIcon iconZoomButton;
iconZoomButton.addFile(QString::fromUtf8(":/images/zoom/zoom.png"), QSize(), QIcon::Normal, QIcon::Off);

zoomButton->setIcon( iconZoomButton );
сделать так:
Код:
zoomButton = new QToolButton(this);
zoomButton->setIcon( QIcon(":/images/zoom/zoom.png") );
Записан
dr_Begemot
Гость
« Ответ #10 : Май 06, 2010, 15:00 »

Использовал инструмент для контроля за утечками памяти Deleaker, так вот, он пишет следующее:

Searching for allocated memory block: leaks detected
Searching for created GDI objects: leaks not detected
Searching for created USER objects: leaks not detected
Searching for created handles: leaks detected

Как думаете, о чем это может говорить?
Записан
ритт
Гость
« Ответ #11 : Май 15, 2010, 17:43 »

какая версия Qt? воспроизводится ли утечка на свежем срезе 4.7?
Записан
dr_Begemot
Гость
« Ответ #12 : Май 25, 2010, 10:37 »

какая версия Qt? воспроизводится ли утечка на свежем срезе 4.7?

у меня 4.6.2
4.7 - я не нашел такой на офф сайте qt
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #13 : Май 25, 2010, 12:02 »

http://qt.nokia.com/developer/qt-qtcreator-prerelease

или если нужны только Qt4.7 либы
git clone git://gitorious.org/qt/qt.git
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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