crossplatform.ru

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


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

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

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


Последние 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 Текстовая версия Сейчас: 29.3.2024, 8:24