Название: Почему для QTableView не работает sizeHint() ?
Отправлено: mozgofil от Июнь 26, 2009, 18:31
Написал код для MCV: C++ (Qt) ///model.h : #pragma once #include <QTCore/QAbstractListModel> class SelectionGUI; class CPropTableModel: public QAbstractTableModel { public: CPropTableModel(SelectionGUI* pGUI,const std::list<const IObject*> &selected_objects,QObject *parent=0); ~CPropTableModel(); void OnSelect(); void ClearSelection(); ////QAbstractListModel overridables: int rowCount(const QModelIndex &parent) const; int columnCount(const QModelIndex &parent) const; Qt::ItemFlags flags(const QModelIndex &index) const; QVariant headerData(int section, Qt::Orientation orientation, int role) const; bool setData(const QModelIndex &index, const QVariant &value, int role); QVariant data(const QModelIndex &index, int role) const; }; ////delegate.h : #pragma once #include <QTGui/qitemdelegate.h> class CPropTableDelegate :public QItemDelegate { public: enum PropTableRole{PROP_TABLE_WIDGET=Qt::UserRole+1,PROP_TABLE_FIELD_TYPE}; CPropTableDelegate(QObject *parent=0); ~CPropTableDelegate(void); QWidget* createEditor(QWidget *parent,const QStyleOptionViewItem &,const QModelIndex & ) const; void updateEditorGeometry(QWidget *editor,const QStyleOptionViewItem &option, const QModelIndex &) const; void setEditorData(QWidget *editor,const QModelIndex &index) const; void setModelData(QWidget *editor, QAbstractItemModel *model,const QModelIndex &index) const; virtual QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index ) const; };
Когда прицепляю модель и делегат к QTableView sizeHint() не действует , когда прицепляю к QListView - sizeHint() действует, но отображается только 1 колонка вместо 2. Что делать?
Название: Re: Почему для QTableView не работает sizeHint() ?
Отправлено: Rcus от Июнь 26, 2009, 18:48
/* Хм, когда это ввели налог на буквы? Похоже скоро соль и спички тоже в дефиците будут, надо запасаться */ /* Осознает свою никчемность в роли телепата, что то все образы размыты: какие-то руки, интересно чьи? видит большие ячейки QTableView и подозревает бессмысленность малого sizeHint'а*/
Название: Re: Почему для QTableView не работает sizeHint() ?
Отправлено: mozgofil от Июнь 26, 2009, 20:08
/* видит большие ячейки QTableView и подозревает бессмысленность малого sizeHint'а*/
o_O :o я знаю, вы что-то скрываете (http://img-fotki.yandex.ru/get/3601/r-g-b-a.0/0_10560_f39e6703_L) Размер ячеек вообще не зависит от sizeHint'a создаётся таким образом C++ (Qt) //prop table: m_table_prop_view=new QTableView(parent); m_table_prop_model=new CPropTableModel(this,selected); CPropTableDelegate* del=new CPropTableDelegate; m_table_prop_view->setModel(m_table_prop_model); m_table_prop_view->setItemDelegate(del);
Название: Re: Почему для QTableView не работает sizeHint() ?
Отправлено: BRE от Июнь 26, 2009, 20:12
А ты вызови void QTableView::resizeRowsToContents () [slot] void QTableView::resizeColumnsToContents () [slot] после установки делегата и думаю все заработает. ;)
Название: Re: Почему для QTableView не работает sizeHint() ?
Отправлено: mozgofil от Июнь 26, 2009, 20:22
А ты вызови void QTableView::resizeRowsToContents () [slot] void QTableView::resizeColumnsToContents () [slot] после установки делегата и думаю все заработает. ;)
C++ (Qt) //prop table: m_table_prop_view=new QTableView(parent); m_table_prop_model=new CPropTableModel(this,selected); CPropTableDelegate* del=new CPropTableDelegate; m_table_prop_view->setModel(m_table_prop_model); m_table_prop_view->setItemDelegate(del); m_table_prop_view->resizeRowsToContents(); m_table_prop_view->resizeColumnsToContents();
Не канает. По вертикали размер клеток такой же, по горизонтали -съёжилось
Название: Re: Почему для QTableView не работает sizeHint() ?
Отправлено: BRE от Июнь 26, 2009, 20:29
Не канает.
Вот рабочий пример. C++ (Qt) #include <QApplication> #include <QStandardItemModel> #include <QTableView> #include <QItemDelegate> class CItemDelegate : public QItemDelegate { Q_OBJECT public: virtual QSize sizeHint( const QStyleOptionViewItem &option, const QModelIndex &index ) const { return QSize( 63, 63 ); } }; int main( int argc, char *argv[] ) { QApplication app( argc, argv ); QStandardItemModel model( 4, 2 ); for( int row = 0; row < 4; ++row ) { for( int column = 0; column < 2; ++column ) { QModelIndex index = model.index( row, column, QModelIndex() ); model.setData( index, QVariant( (row+1) * (column+1) ) ); } } QTableView tableView; CItemDelegate delegate; tableView.setItemDelegate( &delegate ); tableView.setModel( &model ); tableView.resizeColumnsToContents(); tableView.resizeRowsToContents(); tableView.show(); return app.exec(); } #include "main.moc"
Название: Re: Почему для QTableView не работает sizeHint() ?
Отправлено: mozgofil от Июнь 27, 2009, 11:33
Не канает.
Вот рабочий пример. ... Спасибо, resizeRowsToContents() помогает. :) Только этого мало для приличного отображения, ещё нужно: C++ (Qt) m_table_prop_view->verticalHeader()->hide(); m_table_prop_view->setAlternatingRowColors (true); m_table_prop_view->horizontalHeader()->setStretchLastSection (true);
|