带多线单元格的QTableView

时间:2013-05-15 18:57:01

标签: c++ qt desktop-application qt5 qtableview

如何创建QTableView多线单元?

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

终止

有一些方法可以自动断线吗?

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 个答案:

答案 0 :(得分:9)

我认为自动换行是你正在寻找的。确保你有QTableView的enabled wordwrap,然后是manually resize the rows to fit their contents。这将用文本替换椭圆。

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

下面是一些示例代码,可以启用自动换行,将椭圆设置为显示在中间(我的首选项),然后手动调整行高,以适应字边界处的内容:

ui->tableView->setWordWrap(true);
ui->tableView->setTextElideMode(Qt::ElideMiddle);
ui->tableView->resizeRowsToContents();

答案 1 :(得分:3)

我只添加到我的代码中:

        ui->tableView->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);

答案 2 :(得分:1)

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

您可以从QItemDelegate派生。

你必须

  • 根据sizeHint
  • 实施自己的QFontMetrics功能
  • 并覆盖drawDisplay函数以实际显示文本。您可以使用QPainter::drawText显示多行文字。因此,您不必关心绘制焦点和选择矩形,并且自己的绘画功能将很简单。

答案 3 :(得分:0)

tableView->resizeRowsToContents();