2012-03-03 15 views
3

我想:如何将文本换行到QTableWidget的行和列中?

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,但未能成功。

如果文本比设定宽度更长,我想这句话打破。
当前,句子的冗长部分只是没有显示。

+0

您是否尝试过明确设置行高?如果这不起作用,则可能必须实现QStyledItemDelegate的子类才能更改sizeHint()。你想要编辑单元格内容吗? – kossmoboleat 2012-03-03 15:41:21

回答

4

setWordWrap定义文本的行为,而不改变列大小。如果您需要保留列的宽度固定,后调用resizeRowsToContents的物品插入到细胞(我假设你通过QTableWidgetItem添加文本表)。

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

2

这将调整字每列调整大小时自动包装:

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

如问题的评论中提到,明确设置的行大小,以一定的价值似乎工作:

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

我注意到对于我的代码,我不必明确呼叫setWordWrap以便将单元格内容进行单词包装。

+0

该文档说默认'wordWrap'是'true'。所以是的,你不必称呼它。但是,我没有看到任何包装。如果柱子的宽度太小,它可能会被忽略,但是我希望按照单元格的高度和文本出现在需要的任意行上进行包装......这可能吗? – 2015-04-26 05:45:20

相关问题