Название: Не могу подгрузить 2ю QPixmap или QImage Отправлено: soulsaver от Декабрь 06, 2012, 09:18 Здравствуйте, дело обстоит так, есть проэкт, создал в нем класс, переопределенный от QMainWindow, создаю в нем QPixmap, подгружаю в него картинку с альфа каналом, задаю маску QMainWindow в resizeEvent, рисую на этом же виджете эту картинку в paintEvent, получается окно по форме киртинки). создаю второй класс, переопределяю его от QWidget но как только в конструкторе класса подгружаю картинку
Код: imgBtnClose = new QPixMap(":/wndMain/btnClose.png"); Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: carrygun от Декабрь 06, 2012, 10:18 Слишком мало информации. В выводе приложения хотябы что написано? Ну и подебагай чтоли. И очень ли нужен пиксмап в куче? Может лучше в стеке сделать?
Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: soulsaver от Декабрь 06, 2012, 10:35 cMainWindow.h (этот класс отрабатывает нормально, появляется красивая форма, таскается и т.д)
Код: #ifndef CMAINWINDOW_H cMainWindow.cpp Код: #include "cMainWindow.h" cMainCloseButton.h Классу рвет башку и он ломает всю программу. Код: #ifndef CMAINCLOSEBUTTON_H cMainCloseButton.cpp Код: #include "cMainCloseButton.h" Запускается D:\QT_Project\ForWork\debug\ForWork.exe... Программа неожиданно завершилась. D:\QT_Project\ForWork\debug\ForWork.exe завершился с кодом 62097 Стек. Я же с файла ресурсов тяну это все, вшитого в проэкт, стеком придется тянуть из отдельных файлов, как-то не красиво таскать с программой кучу имаджей ) Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: carrygun от Декабрь 06, 2012, 10:47 Запусти отладку по F5, скажи хотябы с какой ошибкой завалилось и куда указало.
Как минимум попробуй все почистить и переqmake'ать, а потом пересобрать. По поводу кучи и стека. Не лучше ли создавать объект QPixmap там, где надо и не использовать указатель? P.S. используй QPoint вместо всяких странных конструкций типа "int intWndLostNowPos [1];" Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: Sancho_s_rancho от Декабрь 06, 2012, 10:59 Код: int intWndLostNowPos [1]; Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: soulsaver от Декабрь 06, 2012, 11:05 Ужааас... Очистка проэкта и мейк решил проблему, все заработало. уже напарывался на такое же, с Q_OBJECT, а тут не додумался блин, извините за беспечность ((. Спасибо большое за советы, исправлюсь ).
А на счет того если я например обьявлю QPixmap в теле конструктора(когда она мне понадобится) то я же не смогу достучатся до нее из другой процедуры, например paintEvent. Или можно как-то даже в процедуре обьявить чтоб весь класс видел? Еще раз большое спасибо ) Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: soulsaver от Декабрь 06, 2012, 11:09 Код: int intWndLostNowPos [1]; Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: Sancho_s_rancho от Декабрь 06, 2012, 11:11 Код: int intWndLostNowPos [1]; Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: soulsaver от Декабрь 06, 2012, 11:22 Код: int intWndLostNowPos [1]; Ну 2 ) Индексы в массиве начинаются с 0. Тоесть 0,1. Или что-то не так? ) Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: carrygun от Декабрь 06, 2012, 11:23 Я бы на твоем месте в хедере завел бы приватный QPixmap, допустим m_pixmap, передавал бы его в конструктор класса, а потом уже бы использовал в рисовалках.
Код
Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: Sancho_s_rancho от Декабрь 06, 2012, 11:24 "Ну 2 ) Индексы в массиве начинаются с 0. Тоесть 0,1. Или что-то не так? )"
Ну 1 Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: carrygun от Декабрь 06, 2012, 11:25 Код: int intWndLostNowPos [1]; Ну 2 ) Индексы в массиве начинаются с 0. Тоесть 0,1. Или что-то не так? ) Количество элементов в массиве - натуральное число. Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: soulsaver от Декабрь 06, 2012, 11:34 Ну по правилу, но их же 2, зачем создавать массив [2] если один из реально существующих элементов будет не востребован, я если честно не пойму. ) Если у вас есть время можете обьяснить ) Почему то что я сделал не правильно? ) Мне будет действительно интересно)
Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: Sancho_s_rancho от Декабрь 06, 2012, 11:38 Ну по правилу, но их же 2, зачем создавать массив [2] если один из реально существующих элементов будет не востребован, я если честно не пойму. ) Если у вас есть время можете обьяснить ) Почему то что я сделал не правильно? ) Мне будет действительно интересно) Написав int a[1] вы объявляете массив целых, состоящий из одного элемента. И теперь вы можете делать только что-то вроде a[0] = 123Если вам надо массив из двух элементов - вы и должны объявить массив из 2-х элементов Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: carrygun от Декабрь 06, 2012, 11:42 Ну по правилу, но их же 2, зачем создавать массив [2] если один из реально существующих элементов будет не востребован, я если честно не пойму. ) Если у вас есть время можете обьяснить ) Почему то что я сделал не правильно? ) Мне будет действительно интересно) Размер массива - натуральное число, то есть 1..N, числа которыми вы ведет счет в нормальной жизни. Индексы же идут 0..N-1. Вообще по чистой случайности у тебя ничего не сломалось. Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: soulsaver от Декабрь 06, 2012, 11:50 аааа, воткнул ))) спасибо )). это он динамически шоль элемент еще один создал, спасибо ))
Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: carrygun от Декабрь 06, 2012, 11:52 аааа, воткнул ))) спасибо )). это он динамически шоль элемент еще один создал, спасибо )) Нет, ты просто испортил участок памяти своими данными. Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: Sancho_s_rancho от Декабрь 06, 2012, 11:52 аааа, воткнул ))) спасибо )). это он динамически шоль элемент еще один создал, спасибо )) Нет. ты просто записал данные за границы массива и твоя программа может рухнуть в любой момент.Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: soulsaver от Декабрь 06, 2012, 13:07 Ааа ) Короче типо система не знает об этой вылезшей части, и при любом запросе куска оперативы другой программой или еще чего, система без зазрения совести отдаст эту часть оперативы вместе с моим куском, и он будет перезаписан )). А интересно таким образом я могу перезаписать ту часть оперативы которую например щас винамп занимает и таким образом положить его? или все равно расширятся будет только на незанятое пространство оперы? )
Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: Igors от Декабрь 06, 2012, 13:39 Ааа ) Короче типо система не знает об этой вылезшей части, и при любом запросе куска оперативы другой программой или еще чего, система без зазрения совести отдаст эту часть оперативы вместе с моим куском, и он будет перезаписан )). А интересно таким образом я могу перезаписать ту часть оперативы которую например щас винамп занимает и таким образом положить его? или все равно расширятся будет только на незанятое пространство оперы? ) Не сможете, адресное пространство др процесса недоступно. В рамках процесса память выделяется блоками, каждый имеет заголовок. Обычно запись за границы массива портит заголовок следующего, цепь блоков разрушена, и вылет происходит в любой момент (часто далеко от места ошибки).Нет ничего плохого что Вы сходу получили окно которое таскается и.т.п. Беда в том что люди часто переоценивают эти успехи, мол, "вот уже и программу написал" :) Но без знания языка все это оказывается "карточным домиком" Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: soulsaver от Декабрь 06, 2012, 13:57 Спасибо ) дома попишу в консоли из учебников с или с++)). Кстати имеет смысл вообще с учить? или можно сразу с++?
Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: Igors от Декабрь 06, 2012, 14:14 Кстати имеет смысл вообще с учить? или можно сразу с++? Цитировать как программисты выносят мусор Это конечно шутка, но IMO очень удачная. В языке С трудно сачкануть, все должно быть сделано аккуратно и скрупулезно. А вот в С++ пожалуйста. А если уж дело доходит до STL - широчайший простор для говнокодинга. А пошли в ход паттерны - то все, ховайся :)1. программист на C Берет ведро за ручку, идет на мусорник, открывает контейнер, высыпает мусор, закрывает контейнер, возвращается с пустым ведром. Если контейнер был переполнен или его не удалось открыть, возвращается назад с полным ведром. 2. программист на C++ Говорит мусору - "вынеси себя на мусорник". Если мусор не слушается, выбрасывает его из окна. Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: Bepec от Декабрь 06, 2012, 15:04 Igors маленькая поправка - можно вообще свалить всю систему нафиг, несмотря на разделение страниц. Но это скорее заслуга самой системы + талант программиста.
Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: LisandreL от Декабрь 06, 2012, 16:19 Не сможете, адресное пространство др процесса недоступно. ArtMoney и Cheat Engine смотрят на вас с удивлением. ;)Да, я понимаю, что там всё далеко не так просто. Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: Igors от Декабрь 06, 2012, 16:32 ArtMoney и Cheat Engine смотрят на вас с удивлением. ;) Никогда не слышал ни об одном :) Более простой пример - отладчик(и). А вот забивать начинающему голову не следует. Услышав что есть исключения он понимает что правила учить необязательно - и результат печаленНазвание: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: soulsaver от Декабрь 06, 2012, 16:46 Офигенный форум(люди тут находящиеся)) Надо тут пожить немного )
Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: Alex Custov от Декабрь 06, 2012, 16:50 Igors маленькая поправка - можно вообще свалить всю систему нафиг, несмотря на разделение страниц. Но это скорее заслуга самой системы + талант программиста. Не нужно особого таланта, простейшие атаки на ресурсы системы - форк бомбы и т.п. Название: Re: Не могу подгрузить 2ю QPixmap или QImage Отправлено: Bepec от Декабрь 06, 2012, 20:35 У меня где то программа лежит, убивающая любой комп с подключенным к нему USB COM портом :)
А ArtMoney и CheatEngine используют внедрение в чужое адресное пространство. Специальными функциями системы. А вот просто так без winApi и функций createRemoteThread и ещё одной, ничего не получится :) |