我是QT新手,尝试从QTableView打印输出我该怎么做呢?多谢
8ehkhllq1#
下面是第一个答案的一个变体,它去掉了中间文件。
QString strStream; QTextStream out(&strStream); const int rowCount = pPublic->tableView->model()->rowCount(); const int columnCount = pPublic->tableView->model()->columnCount(); out << "<html>\n" "<head>\n" "<meta Content=\"Text/html; charset=Windows-1251\">\n" << QString("<title>%1</title>\n").arg(strTitle) << "</head>\n" "<body bgcolor=#ffffff link=#5000A0>\n" "<table border=1 cellspacing=0 cellpadding=2>\n"; // headers out << "<thead><tr bgcolor=#f0f0f0>"; for (int column = 0; column < columnCount; column++) if (!pPublic->tableView->isColumnHidden(column)) out << QString("<th>%1</th>").arg(pPublic->tableView->model()->headerData(column, Qt::Horizontal).toString()); out << "</tr></thead>\n"; // data table for (int row = 0; row < rowCount; row++) { out << "<tr>"; for (int column = 0; column < columnCount; column++) { if (!pPublic->tableView->isColumnHidden(column)) { QString data = pPublic->tableView->model()->data(pPublic->tableView->model()->index(row, column)).toString().simplified(); out << QString("<td bkcolor=0>%1</td>").arg((!data.isEmpty()) ? data : QString(" ")); } } out << "</tr>\n"; } out << "</table>\n" "</body>\n" "</html>\n"; QTextDocument *document = new QTextDocument(); document->setHtml(strStream); QPrinter printer; QPrintDialog *dialog = new QPrintDialog(&printer, NULL); if (dialog->exec() == QDialog::Accepted) { document->print(&printer); } delete document;
yeotifhr2#
这是我的一个问题的解决方案。可能是太复杂了...但是你可以找到更多的解决方案!1).首先,我已经保存表数据到HTML页面文件:
bool CRefViewerDlg::createHtmlTableFromModel() { // make a html-dump of table view if (tableView) { const QString htmlFileName = QString("%1/%2").arg(qApp->applicationDirPath()).arg("myTable.html"); QFile file(htmlFileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { MSG(QString("Can`t create file %1").arg(htmlFileName)); return false; } QTextStream out(&file); const xbLong rowCount = tableView->model()->rowCount(); const xbLong columnCount = tableView->model()->columnCount(); out << "<html>\n" "<head>\n" "<meta Content=\"Text/html; charset=Windows-1251\">\n" << QString("<title>%1</title>\n").arg(refTitleName) << "</head>\n" "<body bgcolor=#ffffff link=#5000A0>\n" "<table border=1 cellspacing=0 cellpadding=2>\n"; // headers out << "<tr bgcolor=#f0f0f0>"; for (xbLong column = 0; column < columnCount; column++) if (!tableView->isColumnHidden(column)) out << QString("<th>%1</th>").arg(tableView->model()->headerData(column, Qt::Horizontal).toString()); out << "</tr>\n"; file.flush(); // data table for (xbLong row = 0; row < rowCount; row++) { out << "<tr>"; for (xbLong column = 0; column < columnCount; column++) { if (!tableView->isColumnHidden(column)) { QString data = tableView->model()->data(tableView->model()->index(row, column)).toString().simplified(); out << QString("<td bkcolor=0>%1</td>").arg((!data.isEmpty()) ? data : QString(" ")); } } out << "</tr>\n"; } out << "</table>\n" "</body>\n" "</html>\n"; file.close(); } return true; }
2).在我将html内容保存到文件后,它在html视图窗口中打开,在那里我可以使用QTextBrowser类打印文档:
QTextBrowser
void CLiveListDlg::on_printPageToolButton_clicked() { #ifndef QT_NO_PRINTER QTextBrowser *editor = static_cast<QTextBrowser* >(textBrowser); QPrinter printer; QPrintDialog *dialog = new QPrintDialog(&printer, this); dialog->setWindowTitle(tr("Print Document")); if (editor->textCursor().hasSelection()) dialog->addEnabledOption(QAbstractPrintDialog::PrintSelection); if (dialog->exec() != QDialog::Accepted) return; editor->print(&printer); #endif }
xt0899hw3#
这个怎么样?遍历QTableView的model,比如QStandardItemModel,获取QStandardItemModel中可用项的每个文本。现在使用QTextCursor,将从您的模型中获得的文本插入到QTextDocument中。您可以使用给出的here示例将文本插入到QTextDocument中。插入QTextDocument完成后,可以通过打印QTextDocument中可用的内容
QTableView
QStandardItemModel
QTextCursor
QTextDocument
void QTextDocument::print ( QPrinter * printer ) const
您必须确保的是,您应该能够遍历每个项,以便能够从model中获取所有项文本。希望能有所帮助。
3条答案
按热度按时间8ehkhllq1#
下面是第一个答案的一个变体,它去掉了中间文件。
yeotifhr2#
这是我的一个问题的解决方案。可能是太复杂了...但是你可以找到更多的解决方案!
1).首先,我已经保存表数据到HTML页面文件:
2).在我将html内容保存到文件后,它在html视图窗口中打开,在那里我可以使用
QTextBrowser
类打印文档:xt0899hw3#
这个怎么样?
遍历
QTableView
的model,比如QStandardItemModel
,获取QStandardItemModel
中可用项的每个文本。现在使用
QTextCursor
,将从您的模型中获得的文本插入到QTextDocument
中。您可以使用给出的here示例将文本插入到QTextDocument
中。插入
QTextDocument
完成后,可以通过打印QTextDocument
中可用的内容您必须确保的是,您应该能够遍历每个项,以便能够从model中获取所有项文本。
希望能有所帮助。