我想要生成一個簡單的表(2行和2列),並使用Qt 4.8.0
將其寫入到pdf文件。適合QTableView中的行,擺脫額外的空間
到目前爲止,我生成PDF,但有額外的空間,在「打印」表的底部:
我得到了同樣的問題,與表的右側,但我管理擺脫它。但在這種情況下,我無能爲力。
這裏的(此代碼的所有位於main.cpp中)的代碼,我現在有:
主要
#include <QtGui/QApplication>
#include <QtCore/QDebug>
#include <QtCore/QMap>
#include <QtCore/QString>
#include <QtGui/QPrinter>
#include <QtGui/QHeaderView>
#include <QtGui/QPainter>
#include <QtGui/QTableWidget>
#include <QtGui/QTableWidgetItem>
/**/
/* Here are the functions.
/**/
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QMap<QString,int> values;
values.insert("X",7);
values.insert("Y",13);
bool status = TableWidgetToPdf("FromWidget.pdf",values);
return a.exec();
}
TableWidgetToPdf
bool TableWidgetToPdf(const QString& title, const QMap<QString, int>& values) {
QTableWidget* table = GenerateTable(values);
QPrinter printer;
printer.setOutputFileName(title);
printer.setOutputFormat(QPrinter::PdfFormat);
QPainter painter(&printer);
painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform);
printer.setPaperSize(QPrinter::A4);
table->render(&painter);
painter.end();
printer.newPage();
delete table;
return true;
};
GenerateTable
QTableWidget* GenerateTable(const QMap<QString,int>& values) {
QTableWidget* table = new QTableWidget;
table->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
table->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
table->setRowCount(2);
table->setColumnCount(2);
table->setEditTriggers(QAbstractItemView::NoEditTriggers);
table->setShowGrid(false);
table->verticalHeader()->hide();
QStringList h_labels;
h_labels << "X" << "Y";
table->setHorizontalHeaderLabels(h_labels);
table->horizontalHeader()->setFont(QFont("Times", 10, QFont::Bold));
table->horizontalHeader()->setStretchLastSection(true);
QTableWidgetItem* item00 = new QTableWidgetItem(QString::number(values["X"]));
item00->setTextAlignment(Qt::AlignCenter);
table->setItem(0,0, item00);
QTableWidgetItem* item01 = new QTableWidgetItem(QString::number(values["Y"]));
item01->setTextAlignment(Qt::AlignCenter);
table->setItem(0,1,item01);
table->setItem(1,0,new QTableWidgetItem("ABCD"));
return table;
};
注:
把
table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
table->verticalHeader()->setResizeMode(QHeaderView::Stretch);
在GenerateTable
空間消失,但細胞大小和消耗比需要的內容太多空間。我想避免,如果可能的:
編輯:
確定。
最後我通過擺脫QTableWidget
實現了我想要的。我不得不使用html
創建表並將其送到QTextEditor
。 QTableWidget
沒有辦法達到這個目的嗎?
您是否已經爲'QTableWidget'嘗試過'QSizePolicy'? http://qt-project.org/doc/qt-4.8/qsizepolicy.html –
是的,沒有任何改變。 –