crossplatform.ru

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


  Ответ в QPainter::drawImage()
Введите ваше имя
Подтвердите код

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

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


Последние 10 сообщений [ в обратном порядке ]
Багира Дата 16.12.2007, 16:37
  Тут можно взять поновей: Qt/Windows Open Source Edition.
Если быть точней, то последнюю версию. :)
Mitnick Дата 16.12.2007, 16:34
  какую нашел :) у меня еще и компилятор со студии 6)

ps: я часика на 2 отойду :)
Багира Дата 16.12.2007, 16:30
 
Цитата(Mitnick @ 16.12.2007, 17:26) *
QT -> 3.3.4
а чего на такой старушке работаешь? :)
ViGOur Дата 16.12.2007, 16:30
  Хм, попробую воспроизвести.
У меня просто VS, XP, 4.3.0. :)
Mitnick Дата 16.12.2007, 16:26
  IDE -> блокнот ;)
ОС -> Win Vista
QT -> 3.3.4
ViGOur Дата 16.12.2007, 16:21
  У меня resizeEvent вызывается!

У тебя какая IDE, OC, версия Qt?
Mitnick Дата 16.12.2007, 16:03
  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, 15:54
  Исходник выложи...
Mitnick Дата 16.12.2007, 15:40
 
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
Багира Дата 16.12.2007, 15:40
  Тут есть хороший пример рисования: Scribble Example.
Сравни, с ним, что не так делаешь или забыл, если не получится, то если можешь выложить исходник, клади, вместе думать будем.
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 9:54