Название: QTableView со строкой итогов Отправлено: vladmailbox от Января 28, 2010, 11:20 Кто-нибудь заморачивался, что-бы в QTableView сделать внизу не скроллируемую строку с итогами.
Как это сделать? Название: Re: QTableView со строкой итогов Отправлено: Urvin от Января 28, 2010, 11:29 Подставь Label под QTableView
Название: Re: QTableView со строкой итогов Отправлено: vladmailbox от Января 28, 2010, 11:49 Нет вообще-то я пронаследовал свой класс, и он вроде нормально работал. Но когда я его вложил в QVBoxLayout, то позиционирование подножья перестало работать. Как-бы это победть? Код такой:
class DbTableView : public QTableView { Q_OBJECT public: DbTableView( QWidget *parent = 0 ); void setQuery( QSqlQuery *query ); void setHeader( QString text ); void Display( bool isRequery ); void setGeometry( const QRect &rec); void setSizePolicy(QSizePolicy &pol ); QSizePolicy sizePolicy(); bool isFooter(); protected slots: void slotColumnResized(int column, int oldWidth, int newWidth ); void slotScrollPosition(int value ); private: QWidget *m_parent; QTableWidget * m_footer; QSqlQueryModel * m_model; QSqlQuery * m_query; const static int FOOTER_HEIGHT = 24; }; DbTableView::DbTableView(QWidget *parent) : QTableView( parent ) { this->m_parent = parent; this->verticalHeader()->hide(); this->setWordWrap(false); //this->horizontalHeader()->setResizeMode(QHeaderView::Stretch); m_footer = new QTableWidget(this->m_parent); m_footer->horizontalHeader()->hide(); m_footer->verticalHeader()->hide(); //m_footer->horizontalScrollBar()->hide(); //m_footer->verticalScrollBar()->hide(); m_footer->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_footer->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); connect( this->horizontalHeader(), SIGNAL(sectionResized(int,int,int)), this, SLOT(slotColumnResized(int,int,int)) ); connect( this->horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(slotScrollPosition(int))); m_model = new QSqlQueryModel(this); } void DbTableView::slotColumnResized(int column, int oldWidth, int newWidth ) { m_footer->setColumnWidth(column,newWidth); } void DbTableView::slotScrollPosition(int value) { m_footer->horizontalScrollBar()->setValue(value); } bool DbTableView::isFooter() { return (m_footer) ? true : false; } void DbTableView::setGeometry(const QRect &rec) { if( isFooter() ) { QRect rc1(rec.x(),rec.y(),rec.width(),rec.height()-FOOTER_HEIGHT); QTableView::setGeometry(rc1); QRect rc2(rec.x(),rec.y()+rc1.height(),rec.width(),FOOTER_HEIGHT); m_footer->setGeometry(rc2); } else { QTableView::setGeometry( rec ); } } void DbTableView::setSizePolicy(QSizePolicy &pol ) { QTableView::setSizePolicy(pol); } QSizePolicy DbTableView::sizePolicy() { return QTableView::sizePolicy(); } void DbTableView::setQuery( QSqlQuery *query ) { m_model->setQuery(*query); if( isFooter() ) { m_footer->setColumnCount( m_model->columnCount() ); m_footer->setRowCount(1); for( int i=0; i < m_footer->columnCount(); i++ ) { QTableWidgetItem *pi = new QTableWidgetItem("kuku"); m_footer->setItem( 0, i, pi ); } } } void DbTableView::setHeader( QString text ) { QStringList lst = text.split("|"); for( int i=0; i < lst.length(); i++ ) { m_model->setHeaderData(i, Qt::Horizontal, lst.at(i)); } } void DbTableView::Display( bool isRequery ) { this->setModel(m_model); // устанавливаем смену цвета this->setAlternatingRowColors(true); // растягиваем колонки и ряды в размер данных this->resizeRowsToContents(); this->resizeColumnsToContents(); this->show(); } |