crossplatform.ru

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

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> QPainter::drawImage(), не рисуется картинка в виджете
Багира
  опции профиля:
сообщение 16.12.2007, 15:40
Сообщение #11


Злоба_дня
***

Группа: Администратор
Сообщений: 314
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 2

Спасибо сказали: 16 раз(а)




Репутация:   4  


Тут есть хороший пример рисования: Scribble Example.
Сравни, с ним, что не так делаешь или забыл, если не получится, то если можешь выложить исходник, клади, вместе думать будем.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Mitnick
  опции профиля:
сообщение 16.12.2007, 15:40
Сообщение #12


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 16.12.2007
Пользователь №: 48

Спасибо сказали: 0 раз(а)




Репутация:   0  


void Openf::paintEvent(QPaintEvent *pe)
{
    using namespace std;
    {
        cout << this->width() << "\t" << this->height() << "\t" << this->isFullScreen() <<endl;
    };
    if (!d->isEmpty())
    {
        draw->drawImage(0, 0, *pict);
    };
}


Выводится в консоль:
866     457     0
867     458     0
868     458     0
868     459     0
870     459     0
871     459     0
871     460     0
873     460     0
874     460     0
875     460     0
875     461     0
877     461     0
878     461     0
878     462     0
880     462     0
880     463     0
882     463     0
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 16.12.2007, 15:54
Сообщение #13


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Исходник выложи...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Mitnick
  опции профиля:
сообщение 16.12.2007, 16:03
Сообщение #14


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 16.12.2007
Пользователь №: 48

Спасибо сказали: 0 раз(а)




Репутация:   0  


Main.cpp
#include <qapplication.h>
#include <qwidget.h>
#include <qpixmap.h>
#include <qpushbutton.h>
#include <qfiledialog.h>
#include <qstring.h>
#include <qimage.h>
#include <qpainter.h>
#include "Openf.h"

int main(int argc, char* argv[])
{
     QApplication app(argc, argv);
     QWidget frame(0,"",Qt::WStyle_StaysOnTop);
     QString file_name;
     Openf widg(&file_name);
     QPushButton *button = new QPushButton("Full screen", &frame, 0);
     QPushButton *button1 = new QPushButton("Normal screen", &frame, 0);
     QPushButton *quit_prg = new QPushButton("Quit", &frame, 0);
     QPushButton *open_im = new QPushButton("Open", &frame, 0);
     widg.setUpdatesEnabled( TRUE );
     widg.show();
     frame.setCaption("Convert");
     QObject::connect(button, SIGNAL(clicked()), &widg, SLOT(showFullScreen()));
     QObject::connect(button, SIGNAL(clicked()), &widg, SLOT(setSizePict()));
     QObject::connect(button1, SIGNAL(clicked()), &widg, SLOT(showNormal()));
     QObject::connect(quit_prg, SIGNAL(clicked()), &app, SLOT(quit()));
     QObject::connect(open_im, SIGNAL(clicked()), &widg, SLOT(drawPict()));
     QObject::connect(open_im, SIGNAL(clicked()), &widg, SLOT(out()));
     button1->move(button->x()+button1->width(), button->y());
     open_im->move(button1->x()+open_im->width(), button1->y());
     quit_prg->move(open_im->x()+quit_prg->width(), button1->y());
     frame.setFixedSize(quit_prg->x()+quit_prg->width(), button->y()+button->height());
     frame.show();
     app.setMainWidget(&frame);
     return app.exec();
}


Openf.h

#ifndef _openf_h_
#define _openf_h_
#include <qwidget.h>
#include <qstring.h>
#include <qpainter.h>
#include <qimage.h>
#include <qpushbutton.h>

//---------------------------------------------------------------------------------------------
class Openf: public QWidget
{
Q_OBJECT
public:
    QString *d;
    QPainter *draw;
    QImage *pict;
    QImage *pict_draw;
    Openf::Openf():QWidget()
    {
        draw = new QPainter(this);
        pict = new QImage();
        pict_draw = new QImage();
    };    
    Openf(QWidget* parent, const char* name);
    Openf(QString *p):QWidget()
    {
        d = p;
        draw = new QPainter(this);
        pict = new QImage();
        
    };
    QString retName() const
    {
        return s;
    };
private:
    QString s;
protected:
    virtual void paintEvent(QPaintEvent *pe);
    virtual void resizeEvent(QResizeEvent *re);
public slots:
    void drawPict();
    void getPictName();
    void setSizePict();
    void out();
};
#endif//



Openf.cpp


#include "qfiledialog.h"
#include "iostream.h"
#include "Openf.h"




Openf::Openf(QWidget* parent, const char* name)
       :QWidget(parent,name)
{
    draw = new QPainter(this);
    pict = new QImage();
    pict_draw = new QImage();
}


void Openf::getPictName()
{
    *d = QFileDialog::getOpenFileName();
}

void Openf::drawPict()
{
    getPictName();
    pict->load(*d);
    this->resize(pict->size());
    draw->drawImage(0, 0, *pict);
    this->show();
    
}

void Openf::out()
{
using namespace std;
    cout << *d << endl;
}

void Openf::paintEvent(QPaintEvent *pe)
{
    using namespace std;
    {
        cout << this->width() << "\t" << this->height() << "\t" << this->isFullScreen() <<endl;
    };
    if (!d->isEmpty())
    {
        draw->drawImage(0, 0, *pict);
    };
}

void Openf::resizeEvent(QResizeEvent *re)
{
    if (!d->isEmpty())
    {
        *pict = pict->smoothScale(this->size(),QImage::ScaleMin);
        draw->drawImage(0, 0, *pict);
        pict->reset();
        pict->load(*d);
    };
}

void Openf::setSizePict()
{
    if (!d->isEmpty())
    {
        *pict = pict->smoothScale(this->size(),QImage::ScaleMin);
        draw->drawImage(0, 0, *pict);
        pict->reset();
        pict->load(*d);
    };
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 16.12.2007, 16:21
Сообщение #15


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


У меня resizeEvent вызывается!

У тебя какая IDE, OC, версия Qt?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Mitnick
  опции профиля:
сообщение 16.12.2007, 16:26
Сообщение #16


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 16.12.2007
Пользователь №: 48

Спасибо сказали: 0 раз(а)




Репутация:   0  


IDE -> блокнот ;)
ОС -> Win Vista
QT -> 3.3.4
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 16.12.2007, 16:30
Сообщение #17


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Хм, попробую воспроизвести.
У меня просто VS, XP, 4.3.0. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Багира
  опции профиля:
сообщение 16.12.2007, 16:30
Сообщение #18


Злоба_дня
***

Группа: Администратор
Сообщений: 314
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 2

Спасибо сказали: 16 раз(а)




Репутация:   4  


Цитата(Mitnick @ 16.12.2007, 17:26) *
QT -> 3.3.4
а чего на такой старушке работаешь? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Mitnick
  опции профиля:
сообщение 16.12.2007, 16:34
Сообщение #19


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 16.12.2007
Пользователь №: 48

Спасибо сказали: 0 раз(а)




Репутация:   0  


какую нашел :) у меня еще и компилятор со студии 6)

ps: я часика на 2 отойду :)

Сообщение отредактировал Mitnick - 16.12.2007, 16:36
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Багира
  опции профиля:
сообщение 16.12.2007, 16:37
Сообщение #20


Злоба_дня
***

Группа: Администратор
Сообщений: 314
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 2

Спасибо сказали: 16 раз(а)




Репутация:   4  


Тут можно взять поновей: Qt/Windows Open Source Edition.
Если быть точней, то последнюю версию. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 15.1.2025, 19:43