можно попробовать через ProxyWdiget в QGraphicsView
есть такой класс вьюва
C++ (Qt)
#ifndef __RESIZEGVIEW_H__
#define __RESIZEGVIEW_H__
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsProxyWidget>
#include <QTimer>
class CResizeGView : public QGraphicsView
{
Q_OBJECT;
QWidget * m_pWidget;
QTimer m_tmDoResize;
public:
CResizeGView( QGraphicsScene * pScene ) : QGraphicsView( pScene )
{
m_pWidget = 0;
m_tmDoResize.setSingleShot( true );
m_tmDoResize.setInterval( 500 );
QObject::connect( &m_tmDoResize, SIGNAL(timeout()), this, SLOT(doResize()) );
}
void setWidget( QWidget * pWidget )
{
m_pWidget = pWidget;
}
private:
virtual void resizeEvent ( QResizeEvent * pEvent )
{
m_tmDoResize.start();
}
private slots:
void doResize()
{
double fdW = (double)( size().width()-10 ) / (double)(m_pWidget->size().width());
double fdH = (double)( size().height()-10 ) / (double)(m_pWidget->size().height());
resetTransform();
scale( fdW, fdH );
}
};
#endif // __RESIZEGVIEW_H__
использовать со своей формой надо так:
C++ (Qt)
QGraphicsScene * pScene = new QGraphicsScene();
pScene->addWidget( pWidget );
CResizeGView * pView = new CResizeGView( pScene );
pView->setGeometry( pWidget->geometry() );
pView->setWidget( pWidget );
pView->show();
у меня ресайзит и вроде достаточно быстро - этот сопсоб хорош тем что он годен для ресайза абсолютно любого виджета в том числе не предназначенного для ресайза совсем