Название: QPainter:Internal error; no available GC Отправлено: Germiona от Июнь 15, 2009, 10:38 Добрый день!
В QScrollView добавляю виджет, на котором производится рисование с помощью класса QPainter. Размеры виджета изменяются пропорциально изменению размеров QScrollView. При запуске приложени все нормально, но при изменениях размеров окна появляется сообщение вида: Код: QPainter:Internal error; no available GC Название: Re: QPainter:Internal error; no available GC Отправлено: mugabe от Июнь 15, 2009, 10:43 Исходники покажи, где происходит отрисовка.
Название: Re: QPainter:Internal error; no available GC Отправлено: Germiona от Июнь 15, 2009, 11:36 Да даже отрисовка элементарного прямоугольника:
Код: QPainter *painter->drawRect(0,0,painter->viewport().width(),painter->viewport().height()); Название: Re: QPainter:Internal error; no available GC Отправлено: pastor от Июнь 15, 2009, 12:23 Цитировать QPainter *painter->drawRect(0,0,painter->viewport().width(),painter->viewport().height()); Ты не находишь эту строку странной? Где создается сам обїект QPainter? Должно быть что-то вроде: Код
Название: Re: QPainter:Internal error; no available GC Отправлено: Germiona от Июнь 15, 2009, 12:37 Это просто пример. Объект QPainter создается в методе QPaintEvent:
Код: void Diagram::paintEvent(QPaintEvent *e) А прямоугольник должен покрыть весь виджет и зависит от его размеров, поэтому и: Код: painter->drawRect(0,0,painter->viewport().width(),painter->viewport().height()); Название: Re: QPainter:Internal error; no available GC Отправлено: pastor от Июнь 15, 2009, 12:42 painter удаляется при выходе из Diagram::paintEvent?
Название: Re: QPainter:Internal error; no available GC Отправлено: Germiona от Июнь 15, 2009, 13:09 нет,это переменная класса.
Вся проблема в Код: painter->viewport() Просто отрисовку диаграмм выполняют функции другого класса при передачи им объекта painter, также им необходимы значения ширины и высоты виджета,на котором рисуются диараммы. Мне казалось, painter->viewport() как раз и дает мне эти значения Название: Re: QPainter:Internal error; no available GC Отправлено: Hellraiser от Июнь 15, 2009, 18:54 Это сколько же паинтеров будет?
Цитировать Код: void Diagram::paintEvent(QPaintEvent *e) Название: Re: QPainter:Internal error; no available GC Отправлено: mugabe от Июнь 16, 2009, 07:30 Germiona, давай весь код, телепаты в отпуске.
Тем более что ты уже дважды меняла показания :) То ты используешь painter из ниоткуда, то он создается в методе, а потом он оказывается уже член класса. По сути, у тебя должно быть: Код
Название: Re: QPainter:Internal error; no available GC Отправлено: Germiona от Июнь 16, 2009, 10:54 Код слишком громоздкий, я не могу его привести.
Цитировать А паинтер там держать не надо - ресурсов не хватит при таком выделении. Об этом и говорит ошибка Почему ресурсов не хватит?? Паинтер создается один раз, в методе paintEvent() Код: class Diagram:public QWidget Далее painter просто ипользуется функциями отрисовки диаграмм. Каких ресурсов может не хватит? К тому же сообщение "QPainter:Internal Error; no available GC" является просто предупреждением, программа работает корректно и все диаграммы отрисовываются как надо. Убираю painter из переменных класса, создаю в методе paintEvent: Код: void Diagram::paintEvent(QPaintEvent *e) Название: Re: QPainter:Internal error; no available GC Отправлено: lit-uriy от Июнь 16, 2009, 11:21 >>Паинтер создается один раз, в методе paintEvent()
А он там удаляется? Или всякий раз, когда происходит событие рисования создаётся новый, а старый где-то безсмысленно занимает память? Название: Re: QPainter:Internal error; no available GC Отправлено: spectre71 от Июнь 16, 2009, 11:23 painter = new QPainter(this);
А где ты удаляешь его? У тебя на каждый paintEvent создается новый QPainter а на старый указатель для тебя теряется! В памяти плодится куча QPainter. Сделай так: Код
Название: Re: QPainter:Internal error; no available GC Отправлено: BRE от Июнь 16, 2009, 11:35 А где ты удаляешь его? Мало того, что в памяти плодится куча объектов QPainter, так и занимаются графические контексты Иксов. После чего и начинаются сыпаться эти сообщения.У тебя на каждый paintEvent создается новый QPainter а на старый указатель для тебя теряется! В памяти плодится куча QPainter. Название: Re: QPainter:Internal error; no available GC Отправлено: Germiona от Июнь 16, 2009, 11:42 Да,точно....что-то я как-то упустила этот момент. Всем большое спасибо,проблема решена
|