За видом отсутствия интереса у других подсобить, методом тыка и с помощью единственно доброго создания его величества google.com - пришел к просто, имхо, варианту:
- используем QWebView;
- в него помещаем наш требуемый html для распечатки;
- для использования QPrintDialog необходимо унаследоваться от QWebView и переопределить метод принт в качестве слота;
- небольшим трюком убрать серый фон QWebView;
- нерешеным остается тока отсутствие картинки в документе
И так - коды:
Наследуемся от QWebView и создаем слот для печати:
C++ (Qt)
class CQWebView : public QWebView
{
Q_OBJECT
public:
CQWebView(QWidget* parent): QWebView(parent) {}
private slots:
void print(QPrinter *);
};
Определние слота делаем таким образом:
C++ (Qt)
void CQWebView::print(QPrinter* p)
{
QWebView::print(p);
}
ну и собственно сама функция печати:
C++ (Qt)
bool frmConfig::remPrint()
{
CQWebView *htmlView = new CQWebView(this);
QFile *remHtml = new QFile("rem_tal.html");
if (remHtml->open(QIODevice::ReadOnly))
{
QTextStream inH(remHtml);
QPalette palette = htmlView->palette();
palette.setBrush(QPalette::Base, Qt::transparent);
htmlView->page()->setPalette(palette);
htmlView->setAttribute(Qt::WA_OpaquePaintEvent, false);
htmlView->setHtml(inH.readAll());
QPrinter printer;
QPrintPreviewDialog pvDialog(&printer);
pvDialog.printer()->setPaperSize(QPrinter::A4);
pvDialog.printer()->setOrientation(QPrinter::Landscape);
pvDialog.printer()->setPageMargins(10.0,10.0,10.0,10.0,QPrinter::Millimeter);
connect(&pvDialog, SIGNAL(paintRequested(QPrinter *)), htmlView, SLOT(print(QPrinter *)));
pvDialog.exec();
return true;
} else
{
return false;
}
}
часть кода, помогающая справиться с фоном QWebView:
C++ (Qt)
QPalette palette = htmlView->palette();
palette.setBrush(QPalette::Base, Qt::transparent);
htmlView->page()->setPalette(palette);
htmlView->setAttribute(Qt::WA_OpaquePaintEvent, false);
Возможно кому-то поможет, а может и нет. На этом заканчиваем данный топик монолога... Пойду шаманить дальше...