Russian Qt Forum
Октябрь 02, 2024, 01:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableView со строкой итогов  (Прочитано 3691 раз)
vladmailbox
Гость
« : Январь 28, 2010, 11:20 »

Кто-нибудь заморачивался, что-бы в QTableView сделать внизу не скроллируемую строку с итогами.
Как это сделать?
Записан
Urvin
Гость
« Ответ #1 : Январь 28, 2010, 11:29 »

Подставь Label под QTableView
Записан
vladmailbox
Гость
« Ответ #2 : Январь 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();

}

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.088 секунд. Запросов: 21.