如何创建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);
答案 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();