2012-03-20 7 views
3

У меня есть QTableView с использованием QSqlQueryModel (он извлекает данные из SQLite).QStyledItemDelegate's sizeHint метод не вызван для строки QTableView

Подкласс 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); 
+1

Выполняет ли QTreeView так, как вы ожидали, и это только проблема с QTableView? (Я так понимаю, вы уже нашли эту тему: http://www.qtforum.org/article/13421/qtableview-how-to-make-rows-size-smaller.html) – HostileFork

+0

Да, я видел это, может быть, я нужно установить Qt :: SizeHintRole где-то , но факт im подкласса QStyledItemDelegate и нет данных() метод наследовать там – user63898

ответ

3

QStyledItemDelegate :: sizeHint полезен только тогда, когда QTableView :: resizeRowsToContents, QTableView :: resizeRowToContents, QTableView :: resizeColumnsToContents и QTableView :: resizeColumnToContents вызываются. или использовать

QHeaderView* headerView = tableView->horizontalHeader(); 
headerView->setResizeMode(QHeaderView::ResizeToContents); 
+0

Есть ли хорошая документация или информация об этом в любом месте? – neuronet

1

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

+0

как я могу? мне нужно установить размер каждой строки? его много mybe im сталкивается с этой ошибкой? https://bugreports.qt-project.org/browse/QTBUG-20298?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel – user63898

0

(кредит, где кредит должен.) В @HostileFork «s комментарий о Qt Forum discussion, есть комментарий нить. Внутри этой нити пользователь mikhailt предлагает good solution.

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

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

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

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