Мдя...
при каждой отрисовке, которая может быть делаться довольно часто, грузится файл картинки, потом из этого файла получается пиксмап, потом из этого пиксмапа получаем новый масштабированный.
К тому же своим MainWindow::paintEvent() ты вообще убиваешь отрисовку сплиттеров.
Вот работающее рещение:
C++ (Qt)
#include <QApplication>
#include <QMainWindow>
#include <QDockWidget>
#include <QPainter>
#include <QPaintEvent>
class MainWindow : public QMainWindow
{
public:
MainWindow( const QString& fn, QWidget* p = 0 )
: QMainWindow( p )
{
bg_.load( fn );
br_.setTextureImage( bg_ );
}
protected:
bool event( QEvent* e )
{
if( e->type() == QEvent::Paint )
{
QPaintEvent* pe = static_cast< QPaintEvent* >( e );
QPainter p( this );
br_.setMatrix( QMatrix(
qreal( width() ) / qreal( bg_.width() ), 0, 0,
qreal( height() ) / qreal( bg_.height() ), 0, 0 ) );
p.setPen( Qt::NoPen );
p.setBrush( br_ );
p.drawRect( pe->rect() );
}
return QMainWindow::event( e );
}
private:
QImage bg_;
QBrush br_;
};
int main( int argc, char** argv )
{
QApplication app( argc, argv );
MainWindow mw( argc > 1 ? argv[1] : "" );
QDockWidget dw[4];
for( int i = 0; i < 4; i++ )
{
dw[i].setWindowTitle( QString( "Dock %1" ).arg( i + 1 ) );
mw.addDockWidget( Qt::DockWidgetArea( 1 << i ), &dw[i] );
}
QWidget w;
mw.setCentralWidget( &w );
mw.show();
return app.exec();
}
На вход собранной аппликухи дай любую картинку)