crossplatform.ru

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


  Ответ в не работает прорисовка в форме
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Алексей1153 Дата 27.10.2010, 11:17
  voipp, это не просто память под художника, это создание нового контекста графического устройства
BRE Дата 27.10.2010, 10:24
  А особенно памяти никакой и не выделяется.
QPainter это класс-рисовальщик, который содержит методы для рисования на QPaintDevice (которыми являются всякие QImage/QPixmap и конечно же QWidget).
Сам QPainter никаких тяжелых буферов не содержит.
voipp Дата 27.10.2010, 10:18
 
Цитата(Litkevich Yuriy @ 27.10.2010, 10:58) *
voipp, QPainter надо создавать там где он нужен. Т.е. в методе paintEvent.

Я подумал, что зачем каждый раз выделять память под художника(QPainter).И тем более я не вижу причины ошибки!Вот что самое главное!
Litkevich Yuriy Дата 27.10.2010, 9:58
  voipp, QPainter надо создавать там где он нужен. Т.е. в методе paintEvent.

voipp Дата 27.10.2010, 9:45
 
#include "canvasforu_t.h"

canvasForU_T::canvasForU_T(QWidget* parent):QWidget(parent)
{
    paint=new QPainter(this);
}

void canvasForU_T::paintEvent(QPaintEvent *){

    //QPainter paint(this);

    paint->drawLine(0,0,170,170);

}

canvasForU_T::~canvasForU_T(){
    delete paint;
}

В данном коде я ведь в деструкторе удаляю paint.Почему всеравно вылезает ошибка
QPainter::begin: Paint device returned engine == 0, type: 1
К тому же не рисуются никакие линии.Ведь деструктор вызывается перед выходом из программы!
PS. Остальной код рабоатет нормально
Гость_voipp_* Дата 27.10.2010, 9:33
  "Можно было оставить, как было, с одним условием -вернуть память в кучу" так я ведь в деструкторе удаляю painter!
Алексей1153 Дата 26.10.2010, 23:25
  voipp, да нормальный вопрос, отчего ж тупой. Можно было оставить, как было, с одним условием -вернуть память в кучу

painter= new QPainter(this);
...
delete painter;


а я написал с созданием переменной на стеке - она удалится автоматом
QPainter painter(this);



Читать про управление памятью в C++ .
voipp Дата 26.10.2010, 23:20
  а можно тупой вопрос - почему именно так? какая разница?
Алексей1153 Дата 26.10.2010, 23:03
  вот так не будет
//это к делу не относится, просто подправил ))
MainWindow::~MainWindow()
{
   delete ui;
   delete pictureU_T,
   delete pictureU_X;
}


//а это оно самое
/*
void MainWindow::paintEvent(QPaintEvent*){
    painter= new QPainter(this);
    QColor color(Qt::blue);
    QPen pen(color);
    pen.setWidth(8);
    painter->setPen(pen);
    //this->pictureU_T->update();
}
*/
void MainWindow::paintEvent(QPaintEvent*)
{
    QPainter painter(this);
    QColor color(Qt::blue);
    QPen pen(color);
    pen.setWidth(8);
    painter.setPen(pen);
}
voipp Дата 26.10.2010, 22:54
  Но ошибка QPaintDevice: Cannot destroy paint device that is being painted всеранво осталась
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 7:48