Сделал вот так:
void MainWindow::sl_actPrint()
{
    qDebug()<<"print";
    QPrinter printer(QPrinter::HighResolution);
    QPrintPreviewDialog preview(&printer,this);
    connect(&preview,SIGNAL(paintRequested(QPrinter*)),this,SLOT(sl_print(QPrinter*)));
    preview.exec();
}
void MainWindow::sl_print(QPrinter*printer)
{    
        QPainter p(printer);
        QPixmap pm = QPixmap::grabWidget(w->w,0);
        p.drawPixmap(0,0,pm);
}
Но он печатает мне изображение в верхнем углу листа, и то (5см х 3см), 
а как сделать чтоб на весь лист растягивал?