Html 将QTextDocument页面方向设置为从右向左
我有一个插槽,用于获取模型数据并将其打印为html表:Html 将QTextDocument页面方向设置为从右向左,html,qt,qtextdocument,Html,Qt,Qtextdocument,我有一个插槽,用于获取模型数据并将其打印为html表: void StudentNotes::setupStudentsListPrint(QPrinter *printer) { QString strStream; QTextStream out(&strStream); const int rowCount = ui->listStudentsTable->model()->rowCount(); const int columnC
void StudentNotes::setupStudentsListPrint(QPrinter *printer)
{
QString strStream;
QTextStream out(&strStream);
const int rowCount = ui->listStudentsTable->model()->rowCount();
const int columnCount = ui->listStudentsTable->model()->columnCount();
out << "<html dir=\"rtl\">\n"
"<head>\n"
"<meta Content=\"text/html; charset=utf-8\">\n"
<< QString("<title>%1</title>\n").arg("Print test")
<< "<style> "
<< " html, body { direction: rtl; }"
<< " table { margin: 10px; page-break-after:auto; width: 100% }"
<< " tr { page-break-inside:avoid; page-break-after:auto }"
<< " td { font-family: \"Times New Roman\"; font-size: 16px; text-align: center; page-break-inside:avoid; page-break-after:auto }"
<< " thead { display:table-header-group }"
<< " tfoot { display:table-footer-group }"
<< "</style>"
<< "</head>\n"
"<body bgcolor=#ffffff link=#5000A0><div dir=\"rtl\">\n"
"<table border=1 cellspacing=0 cellpadding=2>\n";
// headers
out << "<thead><tr bgcolor=#f0f0f0>";
for (int column = 0; column < columnCount; column++)
if (!ui->listStudentsTable->isColumnHidden(column))
out << QString("<th>%1</th>").arg(ui->listStudentsTable->model()->headerData(column, Qt::Horizontal).toString());
out << "</tr></thead>\n";
QString colsSpan = "colspan=1";
// data table
for (int row = 0; row < rowCount; row++) {
out << "<tr>";
if ((row == rowCount -1) || (row == rowCount -2) || (row == rowCount -3))
colsSpan = "colspan=3";
//qDebug() << "dsdsdsds";
else
colsSpan = "colspan=1";
for (int column = 0; column < columnCount; column++) {
if (!ui->listStudentsTable->isColumnHidden(column)) {
QString data = ui->listStudentsTable->model()->data(ui->listStudentsTable->model()->index(row, column)).toString().simplified();
if (column == 0)
out << QString("<td " + colsSpan + " bkcolor=0>%1</td>").arg((!data.isEmpty()) ? data : QString(" "));
else
out << QString("<td bkcolor=0>%1</td>").arg((!data.isEmpty()) ? data : QString(" "));
}
}
out << "</tr>\n";
}
out << "</table></div>\n"
"</body>\n"
"</html>\n";
// Just for debugging purposes
QFile file("htmlFileName.html");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
//MSG(QString("Can`t create file %1").arg(htmlFileName));
}
file.write(strStream.toUtf8());
file.close();
/*
* Prepare QTextDocument
*/
QSizeF paperSize;
paperSize.setWidth(printer->width());
paperSize.setHeight(printer->height());
QTextDocument *document = new QTextDocument();
QTextOption options;
options.setTextDirection(Qt::RightToLeft);
document->setDefaultTextOption(options);
document->setHtml(strStream);
document->setPageSize(paperSize);
document->adjustSize();
document->print(printer);
}
void StudentNotes::setupStudentsListPrint(QPrinter*打印机)
{
QString stream;
QTextStream out(&strStream);
const int rowCount=ui->listStudentsTable->model()->rowCount();
const int columnCount=ui->listStudentsTable->model()->columnCount();
out listStudentsTable->model()->headerData(列,Qt::Horizontal.toString());
out isColumnHidden(列)){
QString data=ui->listStudentsTable->model()->数据(ui->listStudentsTable->model()->索引(行、列)).toString().simplified();
如果(列==0)
外宽();
paperSize.setHeight(打印机->高度());
QTextDocument*document=新的QTextDocument();
期权;
options.setTextDirection(Qt::rightoleft);
文档->设置默认文本选项(选项);
文档->设置HTML(stream);
文档->设置页面大小(纸张大小);
文档->调整大小();
文件->打印(打印机);
}
除了页面方向外,任何东西都可以正常工作,如果我在QPrintPreviewDialog
中打印或显示它,它是从左到右显示的,但是当我在浏览器中打开htmlFileName.html
时,我看到的是从右到左的方向。那么为什么QPrintPreviewDialog
没有看到它应该看到的方向呢?结果是这样的仅支持部分HTML标记和CSS 2.1规则