Как я могу создать многострочную ячейку 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);
Я думаю, что перенос слов — это то, что вы ищете. Убедитесь, что вы включена перенос слов для QTableView, то изменить размер строк вручную, чтобы они соответствовали их содержимому. Это заменит эллипс с текстом.
Как вы упомянули в своем ответе, вы можете установите QHeaderView для изменения размера к содержанию автоматически, но если вы сделаете много добавлений и удалений, это замедлит процесс. Я предпочитаю вручную изменять размер с большим сложением / вычитанием, особенно потому, что пользователь может счесть раздражающим то, что не может изменить его размер самостоятельно.
Вот пример кода, который включает перенос слов, устанавливает эллипс в середине (мои предпочтения), а затем вручную изменяет высоту строки, чтобы соответствовать содержимому на границах слова:
ui->tableView->setWordWrap(true);
ui->tableView->setTextElideMode(Qt::ElideMiddle);
ui->tableView->resizeRowsToContents();
Я только добавляю к своему коду:
ui->tableView->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
Насколько я знаю, единственным способом реализации многострочного рисования текста в ячейках является реализация собственного делегата.
Вы можете извлечь из QItemDelegate
.
Вам придется
sizeHint
функция, основанная на QFontMetrics
drawDisplay
функция для фактического отображения текста. Ты можешь использовать QPainter::drawText
для отображения многострочного текста. Таким образом, вам не нужно заботиться о рисовании фокуса и выделения прямоугольников, а собственная функция рисования будет простой.tableView->resizeRowsToContents();