#include "mytableview.h"
#include <QPainter>
#include <QPrintDialog>
#include <QFileDialog>
#include <QTextDocument>
#include <QAbstractTextDocumentLayout>
#include <QDate>
#include <QScrollBar>
#include <QMessageBox>
#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
#include <QPrintPreviewDialog>
#endif
static inline double mmToInches(double mm) { return mm * 0.039370147; }
QString headertext =
"<table width=\"100%\">"
" <tr>"
" <td align=\"left\"><strong>%1</strong></td>"
" <td align=\"right\"><strong>&date;</strong></td>"
" </tr>"
"</table>";
QString footertext = "<p align=\"right\"><strong>&page;</strong></p>";
MyTableView::MyTableView()
:print_printer(new QPrinter(QPrinter::ScreenResolution)),
print_leftmargin(15.0), print_rightmargin(15.0), print_topmargin(15.0),
print_bottommargin(15.0), print_spacing(5.0),
print_headersize(10.0), print_headerrule(0.5), print_headertext(QString()),
print_footersize(10.0), print_footerrule(0.5), print_footertext(QString())
{
print_printer->setFullPage(true);
print_printer->setOrientation(QPrinter::Portrait);
// for convenience, default to US_Letter for C/US/Canada
// NOTE: bug in Qt, this value is not loaded by QPrintDialog
switch (QLocale::system().country())
{
case QLocale::AnyCountry:
case QLocale::Canada:
case QLocale::UnitedStates:
case QLocale::UnitedStatesMinorOutlyingIslands:
print_printer->setPageSize(QPrinter::Letter); break;
default:
print_printer->setPageSize(QPrinter::A4); break;
}
}
MyTableView::~MyTableView()
{
delete print_printer;
}
QPrinter::PageSize MyTableView::print_pageSize() const
{
return print_printer->pageSize();
}
void MyTableView::print_setPageSize(QPrinter::PageSize size)
{
print_printer->setPageSize(size);
}
QPrinter::Orientation MyTableView::print_orientation() const
{
return print_printer->orientation();
}
void MyTableView::print_setOrientation(QPrinter::Orientation orientation)
{
print_printer->setOrientation(orientation);
}
double MyTableView::print_leftMargin() const
{
return print_leftmargin;
}
void MyTableView::print_setLeftMargin(double margin)
{
if ((margin > 0) && (margin < print_printer->paperRect().width() / 2))
{
print_leftmargin = margin;
}
else
{
print_leftmargin = 0;
}
}
double MyTableView::print_rightMargin() const
{
return print_rightmargin;
}
void MyTableView::print_setRightMargin(double margin)
{
if ((margin > 0) && (margin < print_printer->paperRect().width() / 2))
{
print_rightmargin = margin;
}
else
{
print_rightmargin = 0;
}
}
double MyTableView::print_topMargin() const
{
return print_topmargin;
}
void MyTableView::print_setTopMargin(double margin)
{
if ((margin > 0) && (margin < print_printer->paperRect().height() / 4))
{
print_topmargin = margin;
}
else
{
print_topmargin = 0;
}
}
double MyTableView::print_bottomMargin() const
{
return print_bottommargin;
}
void MyTableView::print_setBottomMargin(double margin)
{
if ((margin > 0) && (margin < print_printer->paperRect().height() / 4))
{
print_bottommargin = margin;
}
else
{
print_bottommargin = 0;
}
}
void MyTableView::print_setMargins(double margin)
{
if ((margin > 0)
&& (margin < print_printer->paperRect().height() / 2)
&& (margin < print_printer->paperRect().width() / 2))
{
print_leftmargin = print_rightmargin = print_topmargin = print_bottommargin = margin;
}
else
{
print_leftmargin = print_rightmargin = print_topmargin = print_bottommargin = 0;
}
}
double MyTableView::print_spacings() const
{
return print_spacing;
}
void MyTableView::print_setSpacings(double spacing)
{
if ((spacing > 0) && (spacing <= print_printer->paperRect().height() / 8))
{
print_spacing = spacing;
}
else
{
print_spacing = 0;
}
}
double MyTableView::print_headerSize() const
{
return print_headersize;
}
void MyTableView::print_setHeaderSize(double size)
{
if ((size > 0) && (size <= print_printer->paperRect().height() / 8))
{
print_headersize = size;
}
else
{
print_headersize = 0;
}
}
double MyTableView::print_headerRule() const
{
return print_headerrule;
}
void MyTableView::print_setHeaderRule(double pointsize)
{
print_headerrule = qMax(0.0, pointsize);
}
const QString &MyTableView::print_headerText() const
{
return print_headertext;
}
void MyTableView::print_setHeaderText(const QString &text)
{
print_headertext = text;
}
double MyTableView::print_footerSize() const
{
return print_footersize;
}
void MyTableView::print_setFooterSize(double size)
{
if ((size > 0) && (size <= print_printer->paperRect().height() / 8))
{
print_footersize = size;
}
else
{
print_footersize = 0;
}
}
double MyTableView::print_footerRule() const
{
return print_footerrule;
}
void MyTableView::print_setFooterRule(double pointsize)
{
print_footerrule = qMax(0.0, pointsize);
}
const QString &MyTableView::print_footerText() const
{
return print_footertext;
}
void MyTableView::print_setFooterText(const QString &text)
{
print_footertext = text;
}
void MyTableView::print_print(const QString &caption)
{
// setup printer
print_printer->setOutputFormat(QPrinter::NativeFormat);
print_printer->setOutputFileName(QString());
print_setHeaderText(headertext.arg(caption));
print_setFooterText(footertext);
// show print dialog
QPrintDialog dialog(print_printer, this);
dialog.setWindowTitle(caption.isEmpty() ? "Print view" : caption);
if (dialog.exec() == QDialog::Rejected) return;
// print it
print_print(print_printer);
}
void MyTableView::print_exportPdf(const QString &caption,
const QString &filename)
{
// file save dialog
QString dialogcaption = caption.isEmpty() ? "Export PDF" : caption;
QString exportname;
if (QFile::exists(filename))
{
exportname = filename;
}
else
{
exportname = QFileDialog::getSaveFileName(this, dialogcaption,
filename, "*.pdf");
}
if (exportname.isEmpty()) return;
if (QFileInfo(exportname).suffix().isEmpty())
exportname.append(".pdf");
// setup printer
print_printer->setOutputFormat(QPrinter::PdfFormat);
print_printer->setOutputFileName(exportname);
// print it
print_print(print_printer);
QMessageBox::information(this, tr("Export PDF"), tr("Done"));
}
void MyTableView::print_preview(const QString &caption)
{
#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
print_setHeaderText(headertext.arg(caption));
print_setFooterText(footertext);
QPrintPreviewDialog *dialog = new QPrintPreviewDialog(print_printer, this);
dialog->setWindowTitle(caption.isEmpty() ? "Print Preview" : caption);
connect(dialog, SIGNAL(paintRequested(QPrinter*)),
this, SLOT(print_print(QPrinter*)));
// preview it
dialog->exec();
delete dialog;
#endif
}
QRectF MyTableView::print_paperRect(QPaintDevice *device)
{
// calculate size of paper
QRectF rect = print_printer->paperRect();
// adjust for DPI
rect.setWidth(rect.width() *
device->logicalDpiX() / print_printer->logicalDpiX());
rect.setHeight(rect.height() *
device->logicalDpiY() / print_printer->logicalDpiY());
return rect;
}
sishuihuahua
- 粉丝: 123
- 资源: 11
会员权益专享
最新资源
- airbattery_v1.0_itmop.com.zip
- ChatGPT科研神器:润色论文,还能帮你读代码
- 脑电功能连接性分析工具包
- 22年开始整理从17年陆续收集的github源码链接,整理成Excel文档 此为第10个文档
- 22年开始整理从17年陆续收集的github源码链接,整理成Excel文档 此为第9个文档
- 【计算机专业VB-毕业设计100套之】VB健身中心会员管理系统(源代码+系统+开题报告+答辩PPT+中英文翻译)
- armarmarmarmarm
- 研究生人工智能机器学习PPT
- 【计算机专业VB-毕业设计100套之】VB计算机自动出卷系统(开题报告+外文翻译+源程序+可执行程序+论文正文+答辩ppt)
- MACMidjourney必备Discord
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


