QTableView с многострочной ячейкой

Как я могу создать многострочную ячейку QTableView?

Я заполняю таблицу, используя код ниже.
Но Уэм 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

Решение

Я думаю, что перенос слов — это то, что вы ищете. Убедитесь, что вы включена перенос слов для QTableView, то изменить размер строк вручную, чтобы они соответствовали их содержимому. Это заменит эллипс с текстом.

Как вы упомянули в своем ответе, вы можете установите QHeaderView для изменения размера к содержанию автоматически, но если вы сделаете много добавлений и удалений, это замедлит процесс. Я предпочитаю вручную изменять размер с большим сложением / вычитанием, особенно потому, что пользователь может счесть раздражающим то, что не может изменить его размер самостоятельно.

Вот пример кода, который включает перенос слов, устанавливает эллипс в середине (мои предпочтения), а затем вручную изменяет высоту строки, чтобы соответствовать содержимому на границах слова:

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

Другие решения

Я только добавляю к своему коду:

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

Насколько я знаю, единственным способом реализации многострочного рисования текста в ячейках является реализация собственного делегата.

Вы можете извлечь из QItemDelegate.

Вам придется

  • реализовать собственный sizeHint функция, основанная на QFontMetrics
  • и переопределить drawDisplay функция для фактического отображения текста. Ты можешь использовать QPainter::drawText для отображения многострочного текста. Таким образом, вам не нужно заботиться о рисовании фокуса и выделения прямоугольников, а собственная функция рисования будет простой.
1

tableView->resizeRowsToContents();

0
По вопросам рекламы [email protected]