Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: dr_Begemot от Апрель 28, 2010, 13:40



Название: Проблема с QIcon
Отправлено: 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 );
то утечек нет, но и иконки соответственно тоже нет...

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

Спасибо)


Название: Re: Проблема с QIcon
Отправлено: crossly от Апрель 28, 2010, 13:46
каким образом утечку определили??


Название: Re: Проблема с QIcon
Отправлено: dr_Begemot от Апрель 28, 2010, 13:47
каким образом утечку определили??

В Visual Studio пишет)


Название: Re: Проблема с QIcon
Отправлено: crossly от Апрель 28, 2010, 13:51
что конкретно пишет??


Название: Re: Проблема с QIcon
Отправлено: GreatSnake от Апрель 28, 2010, 13:55
Цитировать
...но по завершению работы программы фиксятся утечки памяти...
Qt заводит некоторое количество статических объектов, деструкторы которых не отрабатывают при завершении программы.
Это нормально и не стоит на этом заморачиваться.


Название: Re: Проблема с QIcon
Отправлено: dr_Begemot от Апрель 28, 2010, 13:59
Цитировать
...но по завершению работы программы фиксятся утечки памяти...
Qt заводит некоторое количество статических объектов, деструкторы которых не отрабатывают при завершении программы.
Это нормально и не стоит на этом заморачиваться.

Как это связано именно с вызовом iconZoomButton.addFile(QString::fromUtf8(":/images/zoom/zoom.png"), QSize(), QIcon::Normal, QIcon::Off);???
Ведь без нее все ок.


Название: Re: Проблема с QIcon
Отправлено: dr_Begemot от Апрель 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).


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


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

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

Если Вам при программировании не критично, что память кушается, я за вас рад, в моем случае постоянное увеличение памяти на неск килобайт не в радость, а именно так и происходит если сделать несколько циклов.


Название: Re: Проблема с QIcon
Отправлено: jack_r от Апрель 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") );


Название: Re: Проблема с QIcon
Отправлено: dr_Begemot от Май 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

Как думаете, о чем это может говорить?


Название: Re: Проблема с QIcon
Отправлено: ритт от Май 15, 2010, 17:43
какая версия Qt? воспроизводится ли утечка на свежем срезе 4.7?


Название: Re: Проблема с QIcon
Отправлено: dr_Begemot от Май 25, 2010, 10:37
какая версия Qt? воспроизводится ли утечка на свежем срезе 4.7?

у меня 4.6.2
4.7 - я не нашел такой на офф сайте qt


Название: Re: Проблема с QIcon
Отправлено: GreatSnake от Май 25, 2010, 12:02
http://qt.nokia.com/developer/qt-qtcreator-prerelease

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