1

如何创建 QTableView 多行单元格?

我正在使用下面的代码填写表格。但是 WhemGetDescription()返回一个长字符串,内容以...

有什么办法可以自动断线?

QStandardItemModel * model = new QStandardItemModel(logos.size(), 2, this);
model->setHorizontalHeaderItem(0, new QStandardItem(QString("")));
model->setHorizontalHeaderItem(1, new QStandardItem(QString("Nome")));
model->setHorizontalHeaderItem(2, new QStandardItem(QString("Descrição")));

int row = 0;
foreach(Item * item, items)
{
    QStandardItem* check = new QStandardItem(true);
    check->setCheckable(true);
    model->setItem(row, 0, check);

    QStandardItem *nameItem = new QStandardItem(QString(item->GetName()));
    nameItem->setEditable(false);
    model->setItem(row, 1, nameItem);

    QStandardItem *descriptionItem = new QStandardItem(item->GetDescription());
    descriptionItem->setEditable(false);
    descriptionItem->setToolTip(logo->GetDescription());
    model->setItem(row, 2, descriptionItem);
    row++;
}

ui->tableView->setModel(model);
ui->tableView->resizeColumnToContents(0);
ui->tableView->resizeColumnToContents(1);
ui->tableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed);
ui->tableView->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Fixed);
ui->tableView->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Stretch);
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
4

4 回答 4

11

我认为自动换行是您正在寻找的。确保您已为 QTableView启用自动换行,然后手动调整行大小以适合其内容。这将用文本替换椭圆。

正如您在回答中提到的,您可以将 QHeaderView 设置为自动调整为内容的大小,但是如果您进行大量添加和删除操作,则会减慢速度。我更喜欢通过大的加法/减法手动调整大小,特别是因为用户可能会觉得无法自己调整大小很烦人。

这是一些启用自动换行的示例代码,将椭圆设置为出现在中间(我的偏好),然后手动调整行高以适应单词边界处的内容:

ui->tableView->setWordWrap(true);
ui->tableView->setTextElideMode(Qt::ElideMiddle);
ui->tableView->resizeRowsToContents();
于 2013-05-15T21:41:05.593 回答
4

我只添加到我的代码中:

ui->tableView->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
于 2013-05-16T14:32:32.557 回答
2

据我所知,在单元格中实现多行文本绘制的唯一方法是实现自己的委托。

你可以从QItemDelegate.

你必须

  • 实现自己的sizeHint功能,基于QFontMetrics
  • 并覆盖drawDisplay函数以实际显示文本。您可以QPainter::drawText用来显示多行文本。因此,您不必关心绘制焦点和选择矩形,并且自己的绘制功能会很简单。
于 2013-05-15T19:36:26.857 回答
0
tableView->resizeRowsToContents();
于 2014-05-24T20:46:38.040 回答