crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Ошибка "Heap block...
rcdimon
  опции профиля:
сообщение 9.10.2010, 10:41
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 27.10.2009
Пользователь №: 1183

Спасибо сказали: 1 раз(а)




Репутация:   0  


Всем привет. Делаю виджет для рисования графиков особого вида. На виджете будет сам график, шкалы, легенда и горизонтальная полоса прокрутки. Но на первом же этапе наткнулся на непонятную для меня ошибку. Использую QT Creator. Все из QT SDK.

Этот код запускается, картинку отрисовывает (1 пиксель). Но при закрытии программы вываливаются ошибки

Цитата
HEAP[ColorView.exe]:
Heap block at 0906B848 modified at 0906B864 past requested size of 14
HEAP[ColorView.exe]:
Invalid address specified to RtlFreeHeap( 09060000, 0906B850 )


Если создавать QImage прямо в PaintEvent- то все нормально. Но мне нужно чтобы этот QImage, который у меня выполняет роль холста для рисования, был глобальным, доступным для различных функций.


#include "CView.h"

#include <QWidget>
#include <QtGui>
#include <QLayout>


CView::CView(QWidget *parent)
    : QWidget(parent)
{

    DrawArea = new QImage(3, 3, QImage::Format_RGB32);
    QRgb value;

    value = qRgb(189, 149, 39); // 0xffbd9527
    DrawArea->setPixel(1, 1, value);

}

CView::~CView(){

}

void CView::paintEvent(QPaintEvent *)
{
    QImage image = *(this->DrawArea);
    QPainter painter(this);
    painter.drawImage(0,0,image);

}


CView.h
#ifndef CVIEW_H
#define CVIEW_H

#include <Qpainter>
#include <QWidget>
#include <QtGui>


class CView : public QWidget
{
    Q_OBJECT

    public:
        CView(QWidget *parent);
        ~CView();
    public slots:


    protected:


    private:
        QImage *DrawArea;
        void paintEvent(QPaintEvent *);

};


#endif


Сообщение отредактировал rcdimon - 9.10.2010, 10:48
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.10.2010, 13:20
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


void CView::paintEvent(QPaintEvent *)
{
    //QImage image = *(this->DrawArea);
    QPainter painter(this);
    painter.drawImage(0,0,DrawArea);

}
так проще
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rcdimon
  опции профиля:
сообщение 9.10.2010, 14:27
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 27.10.2009
Пользователь №: 1183

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата
painter.drawImage(0,0,DrawArea);


Так не работает.

а

painter.drawImage(0,0,*DrawArea);

ведет себя аналогично первому посту темы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 9.10.2010, 17:08
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(rcdimon @ 9.10.2010, 17:27) *
painter.drawImage(0,0,DrawArea);

Так не работает.


а как определил, что не работает ?

Цитата(rcdimon @ 9.10.2010, 17:27) *
painter.drawImage(0,0,*DrawArea);

ведет себя аналогично первому посту темы.

а это компилятор не пропустит даже

по-моему, ты параметры в функцию не те передаёшь.

попробуй всё же использовать эту перегрузку
Цитата
void QPainter::drawImage ( const QPoint & point, const QImage & image )
This is an overloaded function.
Draws the given image at the given point.


или эту
Цитата
void QPainter::drawImage ( const QRectF & rectangle, const QImage & image )
This is an overloaded function.

Draws the given image into the given rectangle.

Note: The image is scaled to fit the rectangle, if both the image and rectangle size disagree.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rcdimon
  опции профиля:
сообщение 9.10.2010, 19:58
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 27.10.2009
Пользователь №: 1183

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата
а как определил, что не работает ?


Не компилируется. как раз ругается что не те параметры передаю.


Эскизы прикрепленных изображений
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 9.10.2010, 20:01
Сообщение #6


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


а так
painter.drawImage(QPoint(0,0),*DrawArea);


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rcdimon
  опции профиля:
сообщение 9.10.2010, 21:02
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 27.10.2009
Пользователь №: 1183

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата
а так


Все как в первом посте.

Ято я еще интересное заметил- зыкрываю QTcreator, снова запускаю и запускаю программу на исполнение- нормально работает, нормально завершается. Вставляю хотя бы пробел в код, перекомпилирую- и опять все как в первом посте... какие-то глюки QTcreator чтоли?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rcdimon
  опции профиля:
сообщение 9.10.2010, 23:30
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 27.10.2009
Пользователь №: 1183

Спасибо сказали: 1 раз(а)




Репутация:   0  


Вобщем продолжаю работать.. Глюки то появляются, то исчезают... То приложение вообще сразу падает при запуске... Если в режиме отладки, с точками останова- то работает.. пустить в свободное плавание- падает... Ничего не понимаю... QTcreator у всех так ключит или какая-то несовместимость с Win 7? или как это понимать? В прошлом году пользоваться VS + QT, ничего подобного не наблюдалось... но просто я не очень люблю VS...

Сообщение отредактировал rcdimon - 9.10.2010, 23:31
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rcdimon
  опции профиля:
сообщение 10.10.2010, 9:34
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 27.10.2009
Пользователь №: 1183

Спасибо сказали: 1 раз(а)




Репутация:   0  


Установил все на виртуальной машине с Win XP, действительно работает без глюков вроде бы... странно это все )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 19:06