Название: Использование QPixmap, QPicture как буфера Отправлено: Tirex от Апрель 04, 2006, 18:44 Рисую на QWidget через QPainter
Код:
хочу сделать временный буфер. Как реализовать? Не у QPixmap, QPicture нет функций для рисования (line,rect и т.д.) Название: Использование QPixmap, QPicture как буфера Отправлено: Dendy от Апрель 04, 2006, 18:53 ДьІк. ПиксельньІй буфер? Дак:
Код: QPainter painter( &pixmap ); Аль я чёт недопонял... Название: Использование QPixmap, QPicture как буфера Отправлено: Tirex от Апрель 04, 2006, 20:08 Чето я не поннял :?
Можно поподробнее плиз. если бы на WinApi я бы просто сделал бы Bitmap и копировал потом его на нужную область а тут не понимаю Название: Использование QPixmap, QPicture как буфера Отправлено: Dendy от Апрель 05, 2006, 11:52 Уточни какая версия Qt.
Все методьІ рисования в Qt обьединеньІ в QPainter, которьІй одинаково рисует на QPaintDevice, то-есть на: QWidget QPixmap QImage QPicture QPrinter QGLPixelBuffer Название: - Отправлено: Tirex от Апрель 05, 2006, 12:47 QT 4.1.0 OpenSource.
В игре, игровое поле большую чать времени не меняется. Хочу его просто копировать на основной widget ну допустим как image. Потом если какие то изменения, изменить на Image и снова ничего не трогать. но ведь QImage нет методов для рисования. Название: Использование QPixmap, QPicture как буфера Отправлено: Dendy от Апрель 05, 2006, 13:08 QImage - физически тот же QPixmap с форматом QImage::Format_ARGB32_Premultiplied, где каждьІй компонент цвета преумножен на значение альфьІ (для скорости рисования). На QImage рисуется точно так же, как и на QPixmap с помощью QPainter.
Название: Использование QPixmap, QPicture как буфера Отправлено: Tirex от Апрель 05, 2006, 14:54 в .h
QPixmap GField; в .cpp void RenderArea::CreateCache() { QPainter painter(&GField); game.DrawField(painter); } .... void game_engine_class::DrawField(QPainter& qp) { for (int i=0;i<h ;i++) for (int j=0;j<w ;j++) .... game_box[i*w+j].DrawCircle(qp); .... } потом в основом цилке рисования: void RenderArea::paintEvent(QPaintEvent *event) { QPainter painter(this); if (game.IsGame) { painter.setRenderHint(QPainter::Antialiasing); painter.fillRect(event->rect(), QBrush(Qt::cyan)); painter.drawPixmap(1,1,100,100,GField); } } Ничего не происходит, на форме пусто. Плиз можно пример. Название: Использование QPixmap, QPicture как буфера Отправлено: Dendy от Апрель 05, 2006, 16:19 GField является членом класса RenderArea? Не забьІли ли ВьІ установить ему размер?
Название: Использование QPixmap, QPicture как буфера Отправлено: Tirex от Апрель 05, 2006, 20:22 Цитата: "Dendy" GField является членом класса RenderArea? Не забьІли ли ВьІ установить ему размер? На первый вопрос: Да на 2-й :) забыл. добавил в конструтор RenderArea QPixmap GField(100,100);, все равно ничего . Название: Использование QPixmap, QPicture как буфера Отправлено: Dendy от Апрель 06, 2006, 09:13 Убедись, что рисование происходит и в пиксмапу что-то пишется. Попробуй сохранить её содержимое в файл. Убедись, что пиксмапа рисуется на окне, для етого QWidget::update().
Код: GField.toImage().save( "GField.png", "png" ); PNG - чтоб видно бьІло альфу. Название: Использование QPixmap, QPicture как буфера Отправлено: MaxWin от Апрель 07, 2006, 11:20 Я недавно сталкивался с таким приколом.
Глюк как мне кажется вот здесь. QPainter painter(this); Я наследовался от QScrollView. И при таком таком painter область рисования почему-то улетала под виджет. Я делал вот так QPainter painter( viewport() ); В твоем случае, если виджет сложный может быть похожий глюк. Название: Использование QPixmap, QPicture как буфера Отправлено: Dendy от Апрель 07, 2006, 12:10 Никакой ето не глюк. QWidget - логический елемент, область для рисования и приёма собьІтий. Если на нём создано другое окно, то только его область рисования перекрьІвает родительское. Такая архитектура проста для понимания и использования. Просто в каждом конкретном случае нужно читать документацию.
Название: Использование QPixmap, QPicture как буфера Отправлено: Tirex от Апрель 07, 2006, 12:35 в png рисунок есть
потом в void RenderArea::paintEvent(QPaintEvent *event) пишу так: painter.drawPixmap(1,1,100,100,GField); и даже так: painter.drawPixmap(1,1,GField); на экране пусто Название: Использование QPixmap, QPicture как буфера Отправлено: Dendy от Апрель 07, 2006, 13:01 От чего порождён RenderArea?
Название: Использование QPixmap, QPicture как буфера Отправлено: Tirex от Апрель 07, 2006, 13:26 class RenderArea : public QWidget
{ Q_OBJECT Название: Использование QPixmap, QPicture как буфера Отправлено: Dendy от Апрель 07, 2006, 15:46 Дружище, пакуй проект (только исходники и файл проекта) и сюдьІ: dendy-unico@bk.ru
Всё равно щаз нечем заняться, авось помогу. Название: Использование QPixmap, QPicture как буфера Отправлено: Tirex от Апрель 08, 2006, 05:19 нашел ошибку :), там я чуть напартачл
И еще вопрос. раз уж тема пошла хочу сделать заливку фона текстурой пишу так : QPixmap q = QPixmap("datas/f1.png"); QBrush BGBrush( q ); BGBrush.setTexture(q); painter.setBrush(BGBrush); painter.fillRect(event->rect(), BGBrush); ничего не рисуется. |