QTableWidget - 在一行中放置多行文本

6

在QTableWidget的一行中放置多行文本是否可能?

3个回答

6
您也可以在单元格中使用 \n 直接开始新的一行文本 :-)
例如:
    ui->tableWidget->insertRow(i);

    QTableWidgetItem *newItem = new QTableWidgetItem("Line 1 \n Line 2");
    ui->tableWidget->setItem(0,0,newItem);

5
您可能需要在此之后调用ui->tableWidget->resizeRowToContents(i),以确保表格窗口小部件显示行的正确高度。 - wump
我这样做发现,如果行数太多,使得行高超过5000,那么通过表格滚动(特别是在该行上)将会非常缓慢。你有解决方法吗?此外,我尝试了QTextEdit,在行上滚动现在足够流畅,但\n在其中不起作用。为什么? - Aleksandar
你可以阅读https://dev59.com/qUvSa4cB1Zd3GeqPga0l来了解如何设置换行。 - user2672165

6
我可以想到两种方法来强制表格小部件呈现多行文本:
  1. 设置QStyledItemDelegate项代理并在代理的绘制方法中自行渲染文本。 这里你可以找到一个示例,展示了如何对列表视图执行相同的操作。
  2. 另一种解决方案是通过setCellWidget方法将QTextEdit设置为表格小部件的单元格小部件。
以下是第二种方法的示例:
QTableWidget* tableWidget = new QTableWidget(3, 2, this);
tableWidget->setGeometry(20, 20, 300, 300);

for (int row = 0; row<3; row++)
{
    for (int column=0; column<2; column++)
    {
        QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1 long long long long long long text").arg((row+1)*(column+1)));
        tableWidget->setItem(row, column, newItem);
    }
    QTextEdit *edit = new QTextEdit();
    edit->setText(tableWidget->item(row, 0)->text());
    tableWidget->setCellWidget(row, 0, edit);
}

希望这能帮到你,祝好!

1
看起来你的“QStyledItemDelegate”链接已经失效了。目前可用的链接是:QStyledItemDelegate。对于“setCellWidget”同样如此:QTableWidget::setCellWidget()。(我本来想自己修复它,但编辑队列好像已经满了...) - Scheff's Cat

3

只需使垂直标题适应内容,然后使用任意长度的文本。

QTableWidget::verticalHeader()->resizeSections(QHeaderView::ResizeToContents);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接