ich habe ein Problem mit dem QTreeView: die horizontale Scrollbar verhält sich nicht mehr ordnungsgemäss, sobald ich mit setColumnHidden() die Spalten verstecke. Dann nämlich erkennt das Widget nicht mehr die tatsächlich beanspruchte Grösse des Inhalts, sodass entweder gar kein horizontaler Scrollbalken erscheint oder wenn ich ihn mit setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOn ) permanent einschalte, dieser nichts zum scrollen hat.
Folgendes Programm zeigt das Problem:
Datei Test.h:
Code: Alles auswählen
#ifndef TEST_H_
#define TEST_H_
#include <qmainwindow.h>
class QWidget;
class QTreeView;
class QDirModel;
class Test : public QMainWindow
{
Q_OBJECT
public:
Test (QWidget * parent = 0, Qt::WFlags flags = 0);
protected:
QWidget *_centerWidget;
QTreeView* _directoryTree;
QDirModel* _model;
};
#endif
Code: Alles auswählen
#include <qdirmodel.h>
#include <qtreeview.h>
#include <qlayout.h>
#include "Test.h"
Test::Test( QWidget * parent, Qt::WFlags flags ) : QMainWindow( parent, flags )
{
resize( QSize( 200, 200 ). expandedTo( minimumSizeHint() ) );
_centerWidget = new QWidget( this );
_centerWidget->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
_centerWidget->setLayout( new QHBoxLayout() );
setCentralWidget( _centerWidget );
_model = new QDirModel;
_directoryTree = new QTreeView( _centerWidget );
_directoryTree->setModel( _model );
_directoryTree->setContextMenuPolicy(Qt::CustomContextMenu);
_directoryTree->setColumnHidden( 1, true );
_directoryTree->setColumnHidden( 2, true );
_directoryTree->setColumnHidden( 3, true );
_directoryTree->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOn );
_directoryTree->scrollTo( _model->index( QDir::currentPath() ) );
_centerWidget->layout()->addWidget( _directoryTree );
}
Ich habe ja die Vermutung, dass es ein Bug in Qt ist und deswegen auch schon auf das neueste Qt 4.11 geupdatet. Hat aber nichts gebracht.