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();
}
|