【问题标题】:Fitting rows in QTableView, getting rid of extra space在 QTableView 中拟合行,摆脱多余的空间
【发布时间】:2014-01-13 14:15:33
【问题描述】:

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

到目前为止,我生成了 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;
};

生成表

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 实现这一目标吗?

【问题讨论】:

标签: c++ pdf qt4 qtablewidget


【解决方案1】:

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

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

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

希望有效!

【讨论】:

  • 它仍然存在的额外空间:(
  • 我将QTableWidget 添加到MainWindow 以查看它。当我使用策略QSizePolicy::Ignored 时,表格是完美的(请参阅here)。没有多余的空间。但是,在 pdf 中它仍然有额外的空间。
【解决方案2】:

我知道这是一篇旧帖子,但似乎经常阅读。

我尝试了您尝试过的相同方法,但没有一个奏效。最终我使用了 QTableView 并添加了一个额外的方法,称为添加/删除行。

    void
    TitleView::verticalResizeTableViewToContents()
    {
      auto count = m_model->rowCount(QModelIndex());
      auto scrollBarHeight = horizontalScrollBar()->height();
      auto horizontalHeaderHeight = horizontalHeader()->height();
      auto rowTotalHeight = scrollBarHeight + (horizontalHeaderHeight * count);
      setMinimumHeight(rowTotalHeight);
      setMaximumHeight(rowTotalHeight);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 2011-08-21
    • 2012-10-24
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    相关资源
    最近更新 更多