2014-01-13 44 views
2

我想要生成一个简单的表(2行和2列),并使用Qt 4.8.0将其写入到pdf文件。适合QTableView中的行,摆脱额外的空间

到目前为止,我生成PDF,但有额外的空间,在“打印”表的底部:

enter image description here

我得到了同样的问题,与表的右侧,但我管理摆脱它。但在这种情况下,我无能为力。

这里的(此代码的所有位于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空间消失,但​​细胞大小和消耗比需要的内容太多空间。我想避免,如果可能的:

enter image description here

编辑:

确定。

最后我通过摆脱QTableWidget实现了我想要的。我不得不使用html创建表并将其送到QTextEditorQTableWidget没有办法达到这个目的吗?

+0

您是否已经为'QTableWidget'尝试过'QSizePolicy'? http://qt-project.org/doc/qt-4.8/qsizepolicy.html –

+0

是的,没有任何改变。 –

回答

1

您是否尝试过调整大小内容的标志?

请尝试下面的代码,我现在无权访问Qt

table->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents); 
table->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); 

希望工程!

+0

额外的空间它仍然存在:( –

+0

该死的男人,我没有想法,抱歉,我忍不住 –

+0

我添加了'QTableWidget'到一个'MainWindow'来看它当我使用策略'QSizePolicy ::忽略',表格是完美的(参见[这里](http://imgur.com/OJNn1eX))。没有额外的空间,但是在pdf中它仍然有额外的空间。 –

相关问题