2014-01-13 69 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中它仍然有額外的空間。 –

相關問題