Fix bug & compatibility issues with Qt 5.

* Bug: In Hurricane, in NetlistWidget CTOR, the horizontal header was set
    up assuing that there was (at least) three sections (column) in the
    model, which was wrong. Now it is done in the setCell() method which
    know the exact number of sections.
      It was a bug in both Qt 4 & 5, but was showing only under Qt 5.
This commit is contained in:
Jean-Paul Chaput 2016-08-09 17:42:13 +02:00
parent 675e20867b
commit f7e981a840
6 changed files with 30 additions and 17 deletions

View File

@ -55,8 +55,13 @@ namespace CRL {
//_view->resizeColumnToContents ( 1 ); //_view->resizeColumnToContents ( 1 );
QHeaderView* horizontalHeader = _view->horizontalHeader(); QHeaderView* horizontalHeader = _view->horizontalHeader();
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
horizontalHeader->setSectionResizeMode ( 0, QHeaderView::Stretch );
horizontalHeader->setSectionResizeMode ( 1, QHeaderView::ResizeToContents );
#else
horizontalHeader->setResizeMode ( 0, QHeaderView::Stretch ); horizontalHeader->setResizeMode ( 0, QHeaderView::Stretch );
horizontalHeader->setResizeMode ( 1, QHeaderView::ResizeToContents ); horizontalHeader->setResizeMode ( 1, QHeaderView::ResizeToContents );
#endif
//horizontalHeader->setStretchLastSection( false ); //horizontalHeader->setStretchLastSection( false );
QHeaderView* verticalHeader = _view->verticalHeader(); QHeaderView* verticalHeader = _view->verticalHeader();

View File

@ -65,8 +65,13 @@ namespace Hurricane {
QHeaderView* horizontalHeader = _view->header(); QHeaderView* horizontalHeader = _view->header();
horizontalHeader->setDefaultAlignment ( Qt::AlignHCenter ); horizontalHeader->setDefaultAlignment ( Qt::AlignHCenter );
horizontalHeader->setMinimumSectionSize( (Graphics::isHighDpi()) ? 600 : 300 ); horizontalHeader->setMinimumSectionSize( (Graphics::isHighDpi()) ? 600 : 300 );
#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
horizontalHeader->setResizeMode ( 0, QHeaderView::Interactive ); horizontalHeader->setResizeMode ( 0, QHeaderView::Interactive );
horizontalHeader->setResizeMode ( 1, QHeaderView::Interactive ); horizontalHeader->setResizeMode ( 1, QHeaderView::Interactive );
// #else
// horizontalHeader->setSectionResizeMode ( 0, QHeaderView::Interactive );
// horizontalHeader->setSectionResizeMode ( 1, QHeaderView::Interactive );
#endif
horizontalHeader->setStretchLastSection( true ); horizontalHeader->setStretchLastSection( true );
QLabel* filterPatternLabel = new QLabel(tr("&Filter pattern:"), this); QLabel* filterPatternLabel = new QLabel(tr("&Filter pattern:"), this);
@ -219,7 +224,8 @@ namespace Hurricane {
{ {
if (delta == 0) return; if (delta == 0) return;
QModelIndex newIndex = _baseModel->index( _view->currentIndex().row()+delta, 0, QModelIndex() ); //QModelIndex newIndex =
_baseModel->index( _view->currentIndex().row()+delta, 0, QModelIndex() );
//if (newIndex.isValid()) //if (newIndex.isValid())
// _view->selectRow( newIndex.row() ); // _view->selectRow( newIndex.row() );

View File

@ -71,9 +71,6 @@ namespace Hurricane {
QHeaderView* horizontalHeader = _view->horizontalHeader(); QHeaderView* horizontalHeader = _view->horizontalHeader();
horizontalHeader->setDefaultAlignment ( Qt::AlignHCenter ); horizontalHeader->setDefaultAlignment ( Qt::AlignHCenter );
horizontalHeader->setMinimumSectionSize( (Graphics::isHighDpi()) ? 300 : 150 ); horizontalHeader->setMinimumSectionSize( (Graphics::isHighDpi()) ? 300 : 150 );
horizontalHeader->setResizeMode ( 0, QHeaderView::Interactive );
horizontalHeader->setResizeMode ( 1, QHeaderView::Interactive );
horizontalHeader->setResizeMode ( 2, QHeaderView::Interactive );
horizontalHeader->setStretchLastSection( true ); horizontalHeader->setStretchLastSection( true );
QHeaderView* verticalHeader = _view->verticalHeader(); QHeaderView* verticalHeader = _view->verticalHeader();

View File

@ -66,8 +66,9 @@ namespace Hurricane {
inline void HierarchyModel::setCell ( Cell* cell ) inline void HierarchyModel::setCell ( Cell* cell )
{ {
beginResetModel();
_root.setCell( cell ); _root.setCell( cell );
reset(); endResetModel();
} }

View File

@ -66,17 +66,14 @@ namespace Hurricane {
template<typename InformationType> template<typename InformationType>
void NetlistModel::setCell ( Cell* cell ) void NetlistModel::setCell ( Cell* cell )
{ {
if ( _cell != cell ) { if (_cell != cell) {
if ( _cell ) if (_cell) delete _netlist;
delete _netlist;
_cell = cell; _cell = cell;
_netlist = new NetInformationsVector<InformationType>(); _netlist = new NetInformationsVector<InformationType>();
if ( _cell ) { if (_cell) {
forEach ( Net*, net, _cell->getNets() ) { for ( Net* net : _cell->getNets() ) _netlist->addNet( net );
_netlist->addNet ( *net );
}
} }
emit layoutChanged (); emit layoutChanged ();
@ -84,7 +81,6 @@ namespace Hurricane {
} }
} // End of Hurricane namespace. } // Hurricane namespace.
#endif // HURRICANE_NETLIST_MODEL_H
#endif // __NETLIST_MODEL_H__

View File

@ -18,10 +18,10 @@
#ifndef HURRICANE_NETLIST_WIDGET_H #ifndef HURRICANE_NETLIST_WIDGET_H
#define HURRICANE_NETLIST_WIDGET_H #define HURRICANE_NETLIST_WIDGET_H
#include <set> #include <set>
#include <QWidget> #include <QWidget>
#include <QTableView> #include <QTableView>
#include <QHeaderView>
#include <QItemDelegate> #include <QItemDelegate>
#include <QSortFilterProxyModel> #include <QSortFilterProxyModel>
#include "hurricane/Commons.h" #include "hurricane/Commons.h"
@ -187,9 +187,17 @@ namespace Hurricane {
string windowTitle = "Netlist" + getString(cell); string windowTitle = "Netlist" + getString(cell);
setWindowTitle( tr(windowTitle.c_str()) ); setWindowTitle( tr(windowTitle.c_str()) );
QHeaderView* header = _view->horizontalHeader();
_view->selectRow( 0 ); _view->selectRow( 0 );
for ( int i=0 ; i<_baseModel->columnCount() ; ++i ) for ( int i=0 ; i<_baseModel->columnCount() ; ++i ) {
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
header->setSectionResizeMode( i, QHeaderView::Interactive );
#else
header->setResizeMode( i, QHeaderView::Interactive );
#endif
_view->resizeColumnToContents( i ); _view->resizeColumnToContents( i );
}
_view->setVisible( true ); _view->setVisible( true );
} }