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

Posted

技术标签:

【中文标题】QTableWidget - 将多行文本放在一行中【英文标题】:QTableWidget - putting multiple lines of text in one row 【发布时间】:2011-03-19 00:03:39 【问题描述】:

QTableWidget的一行可以放多行文字吗?

【问题讨论】:

【参考方案1】:

我可以考虑两种强制tablewidget渲染多行文本的方法:

    设置 QStyledItemDelegate 项目委托并在委托绘制方法中自己呈现文本。 Here 你可以找到一个例子,你可以对列表视图做同样的事情。

    另一种解决方案是通过setCellWidget 方法将QTextEdit 设置为表格小部件的单元格小部件。

以下是#2 的示例:

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);

希望这会有所帮助,问候

【讨论】:

您的“QStyledItemDelegate”链接似乎已损坏。当前有效的链接是:QStyledItemDelegate。 “setCellWidget”也是如此:QTableWidget::setCellWidget()。 (我会自己修复它,但编辑队列似乎已经满了......)【参考方案2】:

您也可以简单地使用 \n 在单元格中开始新行:-)

例如:

    ui->tableWidget->insertRow(i);

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

【讨论】:

之后您可能需要调用 ui->tableWidget->resizeRowToContents(i) 以确保 tablewidget 显示正确的行高度 我是这样做的,发现如果行太多,所以行高超过 5000,滚动表格(尤其是在那一行)会很慢。你有解决方案吗?我还尝试了 QTextEdit,现在滚动行已经足够流畅了,但是 \n 在其中不起作用。为什么? 您可以阅读***.com/questions/2173151/… 来了解如何设置换行符。【参考方案3】:

只需制作垂直标题以适应内容,然后根据需要使用文本。

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

【讨论】:

以上是关于QTableWidget - 将多行文本放在一行中的主要内容,如果未能解决你的问题,请参考以下文章

如何在控制台的一行中将两个多行字符串放在一起?

pyqt Qtablewidget 获取选中多行的行号或者内容

PostgreSQL:如何将多行的值放在不同的列中,并将所有值合并到一行中?

R:从文本文件运行多行 sql

垂直文本对齐多行

将多行中的文本合并为一行(作为逗号分隔的字符串)