Переопределите paintEvent для виджета, и рисуйте там.
Спасибо за помощь, но решение уже нашел. Не рисовалось(мне просто нужно вывести картинку в окне) потому, что неправильно реализовал слот в классе Openf.
теперь появилась другая проблема: при перекрывании виджета, куда помещено изображение, оное не перерисовыается... изображение пропадает и при showFullScreen() и showNormalScreen()
Спасибо большое за помощь! уже и это сделал) почему-то не получаю событий в resizeEvent(), хотя размеры виджета изменяются...
А ты его переопределял?
Если переопределил, то как?
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);
};
}
connect делал?
нет, а зачем тут connect если переопределяем реакцию на событие?
Тут есть хороший пример рисования: http://crossplatform.ru/documentation/qtdoc4.3/widgets-scribble.php.
Сравни, с ним, что не так делаешь или забыл, если не получится, то если можешь выложить исходник, клади, вместе думать будем.
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
Исходник выложи...
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();
}
#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//
#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);
};
}
У меня resizeEvent вызывается!
У тебя какая IDE, OC, версия Qt?
IDE -> блокнот
ОС -> Win Vista
QT -> 3.3.4
Хм, попробую воспроизвести.
У меня просто VS, XP, 4.3.0.
какую нашел у меня еще и компилятор со студии 6)
ps: я часика на 2 отойду
Тут можно взять поновей: http://trolltech.com/developer/downloads/qt/windows.
Если быть точней, то последнюю версию.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)