gpt4 book ai didi

c++ - 在 QTableView 中适配行,摆脱多余的空间

转载 作者:太空狗 更新时间:2023-10-29 23:04:54 25 4
gpt4 key购买 nike

我正在尝试生成一个简单的表格(2 行和 2 列)并将其写入 pdf 文件,使用 Qt 4.8.0

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

enter image description here

我在 table 的右侧遇到了同样的问题,但我设法摆脱了它。但在这种情况下,我一无所知。

这是我现在的代码(所有代码都位于 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;
};

生成表

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 创建表格并将其提供给 QTextEditor。有什么方法可以用 QTableWidget 实现吗?

最佳答案

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

试试下面的代码,我现在无法访问 Qt

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

希望有用!

关于c++ - 在 QTableView 中适配行,摆脱多余的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21093408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com