Метод sizeHint в QStyledItemDelegate не вызывается для строки QTableView - PullRequest
3 голосов
/ 20 марта 2012

У меня QTableView с использованием QSqlQueryModel (он получает данные из SQLite).

Существует подкласс QStyledItemDelegate с именем MiniItemDelegate, который я использую в качестве делегата для элементов. Я настроил sizeHint () метод следующим образом:

QSize MiniItemDelegate::sizeHint(const QStyleOptionViewItem &option,
                                 const QModelIndex &index) const
{
    // just for testing...breakpoint shows this line never gets called
    return QSize(256,256);  
}

Я не уверен, почему этот метод не вызывается, когда я запускаю следующий код:

m_pMiniItemDelegate = new MiniItemDelegate(this);
ui->PList_tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->PList_tableView->setSelectionMode(QAbstractItemView::SingleSelection);
ui->PList_tableView->setItemDelegate(m_pMiniItemDelegate);
ui->PList_tableView->setAlternatingRowColors(true);
ui->PList_tableView->setModel(ListMiniSqlModel::instance());

Это также не работает:

ui->PList_tableView->resizeColumnsToContents();
ui->PList_tableView->resizeRowsToContents();

Также не это:

QHeaderView* headerView = ui->PList_tableView->horizontalHeader();
headerView->setResizeMode(QHeaderView::ResizeToContents);

Ответы [ 3 ]

3 голосов
/ 29 мая 2013

QStyledItemDelegate :: sizeHint полезен только при вызове QTableView :: resizeRowsToContents, QTableView :: resizeRowToContents, QTableView :: resizeColumnsToContents и QTableView :: resizeColumnToContents.или используйте

QHeaderView* headerView = tableView->horizontalHeader();
headerView->setResizeMode(QHeaderView::ResizeToContents);
1 голос
/ 21 марта 2012

Вы пробовали: setColumnWidth или setRowHeight и HorizontalHeader () -> setResizeMode (QHeaderView :: Fixed) ?

0 голосов
/ 27 июня 2016

( Кредит, причитающийся кредит. ) В комментарии @ HostileFork о обсуждении на Qt Forum есть ветка комментариев. В этой теме пользователь mikhailt предлагает хорошее решение .

verticalHeader имеет свойство DefaultSectionSize , которое можно настраивать. Неважно, отображается ли вертикальный заголовок (метки на левой стороне таблицы) или нет, размер все равно будет использоваться.

ui->PList_tableView->verticalHeader()->setDefaultSectionSize(34);

Это просто решило мою проблему с Qt 5.6 и избавило меня от настройки высоты каждой строки данных отдельно или от изменения размера таблицы.

Судя по возрасту ветки комментариев, где я его нашел, это уже работало и в Qt 4.

...