Russian Qt Forum
Ноябрь 22, 2024, 06:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Странности с QPixmap(?)  (Прочитано 3608 раз)
joktar
Гость
« : Сентябрь 04, 2005, 07:44 »

Стоит такая задача:
есть класс, которому нужно рисовать на QPixmap,а этот QPixmap в сво ю очередь должен выводить другой класс.
Только вот реально выводится QPixmap только под Qt 4.0.1/X11
а под Qt 4.0.1/Win32 OpenSource - нет.

Рисование делаю так:
#include "xxx_renderer.h"
...

QPixmap pixmap(800,600);
QPainter painter(&pixmap);
...//рисуем
painter.end();
//указываем другому классу что рисовать
//ui.renderer - объект класса xxx_renderer
ui.renderer->setPixmap(pixmap);
...
код renderer.h:
#include <QtGui/QWidget>
#include <QPixmap>
#include <QtGui/QPaintEvent>
#include <QPainter>
#ifndef __XXX_RENDERER_H_
#define __XXX_RENDERER_H_

class xxx_renderer: public QWidget
{
    Q_OBJECT
public:

    xxx_renderer(QWidget * parent = 0):
       QWidget(parent)
    {
    }
    /***
     * Деструктор класса рендера,
     * virtual так как есть планы от него наследоватся
     */
    virtual ~xxx_renderer()
    {
    }
    Q_PROPERTY(QPixmap Image READ getPixmap WRITE setPixmap);

    /***
     * Получение фоновой картинки
     * @returns - фоновую картинку
     */
    QPixmap getPixmap() const
    {
       return pixmap;
    }

    /***
     * Установка фоновой картинки
     * @newPixmap - новая картика
     */
    void setPixmap(QPixmap newPixmap)
    {
       pixmap=newPixmap;
       repaint();
    }
    /***
     * Отрисовка нашего виджета - пока просто вывод картинки
     * @event - что отрисовывать(См QPaintEvent в Qt Assistant)
     */
    void paintEvent(QPaintEvent  *event );
protected:
    QPixmap  pixmap;
};
#endif
реализация paintEvent():
#include "xxx_renderer.h"

/***
 * Отрисовка нашего виджета - пока просто вывод картинки
 * @event - что отрисовывать(См QPaintEvent в Qt Assistant)
 */
void xxx::paintEvent(QPaintEvent  *event )
{

    QPainter painter;
    painter.begin(this);
    painter.drawPixmap(0,0,width(),height(),pixmap);
    QString title=QString("График:");
    int string_width=painter.fontMetrics().width(title);
    //int string_height=painter.fontMetrics().height();
    int start_x_position=10;//width()/2-string_width/2;
    int start_y_position=10;
    painter.drawText(start_x_position,start_y_position,title);
}
Под Win32 - выводится только надпись "График",
под X11-все что было нарисовано на pixmap'е
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.104 секунд. Запросов: 20.