【问题标题】:How to word wrap text in the rows and columns of a QTableWidget?如何在 QTableWidget 的行和列中自动换行?
【发布时间】:2012-03-03 06:39:29
【问题描述】:

我试过了:

    QTableWidget *j = new QTableWidget (10000, 5, centralWidget);
    j->setColumnWidth (0, 500);
    j->setColumnWidth (1, 30);
    j->setColumnWidth (2, 30);
    j->setColumnWidth (3, 320);
    j->setColumnWidth (4, 310);

    j->setWordWrap (true);

也试过resizeColumnsToContentsresizeRowsToContents,但都失败了。

如果文本比设置的宽度长,我希望句子分解。
目前,句子的冗长部分没有显示出来。

【问题讨论】:

  • 您是否尝试过明确设置行高?如果这不起作用,您可能必须实现 QStyledItemDelegate 的子类才能更改 sizeHint()。您希望能够编辑单元格内容吗?

标签: qt qtablewidget


【解决方案1】:

setWordWrap 定义文本的行为,而不改变列大小。如果您需要保持列宽固定,请在将项目插入单元格之后调用resizeRowsToContents(我假设您通过QTableWidgetItem 将文本添加到表格中)。

请注意,如果项目中包含的任何单词比列宽,则从该点开始文本将被省略(默认情况下,您将看到省略号:...)。如果你想改变这种行为,你需要重新实现项目的绘画功能或拉伸你的列。

【讨论】:

    【解决方案2】:

    这将在每次调整列大小时自动调整自动换行:

    connect(
        tableWidget->horizontalHeader(),
        SIGNAL(sectionResized(int, int, int)),
        tableWidget,
        SLOT(resizeRowsToContents()));
    

    【讨论】:

      【解决方案3】:

      如问题评论中所述,将行大小显式设置为某个值似乎可行:

       tableWidget->resizeRowsToContents();
       tableWidget->verticalHeader()->setDefaultSectionSize(50);
      

      我注意到,对于我的代码,我不必显式调用 setWordWrap 就可以将单元格内容换行。

      【讨论】:

      • 文档说默认情况下wordWraptrue。所以是的,你不必调用它。但是,我没有看到任何包装。如果列的宽度太小,它可能会被省略,但我想换行,因为单元格的高度正在增长,并且文本根据需要出现在任意数量的行上......这可能吗?
      猜你喜欢
      • 2019-05-14
      • 1970-01-01
      • 1970-01-01
      • 2018-03-10
      • 2019-03-06
      • 2018-07-07
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      相关资源
      最近更新 更多