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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Прокрутка QTreeView  (Прочитано 2953 раз)
wolfut
Гость
« : Июнь 08, 2011, 14:18 »

 Доброго времени суток!

Можно ли как то для QTreeView сделать ручную прокрутку (вместо стандратного скрола), c помощью кнопок  "Вверх", "Вниз" ?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Июнь 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();
}
 
Записан

Qt 5.11/4.8.7 (X11/Win)
wolfut
Гость
« Ответ #2 : Июнь 09, 2011, 09:34 »

Большое спасибо!
Записан
Igore
Гость
« Ответ #3 : Июнь 09, 2011, 16:26 »

Можно еще посмотреть в сторону QAbstractSlider::triggerAction(SliderAction action).
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Июнь 09, 2011, 19:03 »

Можно еще посмотреть в сторону QAbstractSlider::triggerAction(SliderAction action).
Имхо, большой пользы от этого triggerAction() нет.
Вот если бы QAbstractSlider имел бы аналогичные слоты, тогда всё было бы намного проще, а то приходится много обвязки прописывать.
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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