Название: Прокрутка QTreeView
Отправлено: wolfut от Июнь 08, 2011, 14:18
Доброго времени суток!
Можно ли как то для QTreeView сделать ручную прокрутку (вместо стандратного скрола), c помощью кнопок "Вверх", "Вниз" ?
Название: Re: Прокрутка QTreeView
Отправлено: GreatSnake от Июнь 08, 2011, 15:33
Доброго времени суток! Можно ли как то для QTreeView сделать ручную прокрутку (вместо стандратного скрола), c помощью кнопок "Вверх", "Вниз" ?
Да легко: C++ (Qt) #include <QApplication> #include <QTreeView> #include <QStandardItemModel> #include <QVBoxLayout> #include <QPushButton> #include <QScrollBar> class TreeView : public QTreeView { Q_OBJECT public: TreeView( QWidget* p = 0 ) : QTreeView( p ) {} protected slots: void scrollUp() { QScrollBar* sb = verticalScrollBar(); sb->setValue( sb->value() - 1 ); } void scrollDown() { QScrollBar* sb = verticalScrollBar(); sb->setValue( sb->value() + 1 ); } }; int main( int argc, char** argv ) { QApplication app( argc, argv ); QWidget w; QVBoxLayout l( &w ); QPushButton up( "&Up" ), dn( "&Down" ); up.setAutoRepeat( true ); up.setAutoRepeatInterval( 10 ); dn.setAutoRepeat( true ); dn.setAutoRepeatInterval( 10 ); l.addWidget( &up ); TreeView tv; l.addWidget( &tv ); tv.setRootIsDecorated( false ); tv.setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); tv.setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); QStandardItemModel model; tv.setModel( &model ); QStringList colorNames = QColor::colorNames(); model.setColumnCount( 1 ); model.setRowCount( colorNames.size() ); model.setHeaderData( 0, Qt::Horizontal, "Known Colors", Qt::DisplayRole ); for( int i = 0; i < colorNames.size(); ++i ) { QModelIndex index( model.index( i, 0, QModelIndex() ) ); model.setData( index, colorNames[i], Qt::DisplayRole ); model.setData( index, QColor( colorNames[i] ), Qt::DecorationRole ); } l.addWidget( &dn ); tv.connect( &up, SIGNAL( clicked() ), SLOT( scrollUp() ) ); tv.connect( &dn, SIGNAL( clicked() ), SLOT( scrollDown() ) ); w.show(); return app.exec(); }
Название: Re: Прокрутка QTreeView
Отправлено: wolfut от Июнь 09, 2011, 09:34
Большое спасибо!
Название: Re: Прокрутка QTreeView
Отправлено: Igore от Июнь 09, 2011, 16:26
Можно еще посмотреть в сторону QAbstractSlider::triggerAction(SliderAction action).
Название: Re: Прокрутка QTreeView
Отправлено: GreatSnake от Июнь 09, 2011, 19:03
Можно еще посмотреть в сторону QAbstractSlider::triggerAction(SliderAction action).
Имхо, большой пользы от этого triggerAction() нет. Вот если бы QAbstractSlider имел бы аналогичные слоты, тогда всё было бы намного проще, а то приходится много обвязки прописывать.
|