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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как поменять внешний вид QSCrollBar у QAbstarctItemView  (Прочитано 4410 раз)
izoomer
Гость
« : Апрель 07, 2007, 23:18 »

[QT-4.2.0 Linux]
Есть свой QAbstarctItemView , требуется в нем сделать свой скролл бар ... то есть например ... прозрачный с двумя треуголничками своего дизайна для вверх вниз ... и ползунок фикисрованного размера ... думал сделать через создание своего QScrollBar с переопределением QPaintEvent и последующей привязкой его к своему виверу через setVerticalScrollBar .... а как в PaintEvent указать что рисую стрелку ВВЕРХ , стрелку ВНИЗ и слайдер ? .... вот в чем вопрос ...

добавлено спустя 54 минуты:

Вот создал такой вот свой скроллБар ...
Код:

#ifndef JSCROLLBAR_H
#define JSCROLLBAR_H

#include <QScrollBar>
#include <QStyle>
#include <QStyleOption>
#include <QPainter>

/**
@author root <root@localhost>
*/
class JScrollBar : public QScrollBar
{
public:
    JScrollBar();

    ~JScrollBar();
    void paintEvent ( QPaintEvent * event );
protected:

};

#endif



JScrollBar::JScrollBar()
{
}


JScrollBar::~JScrollBar()
{
}

/*!
    \fn JScrollBar::paintEvent ( QPaintEvent * event )
 */
void JScrollBar::paintEvent ( QPaintEvent * event )
{

    QPainter painter;
painter.begin(this);
painter.setBrush(QBrush(Qt::white, Qt::SolidPattern));
painter.drawRect(QRect(0,0,20,20));
painter.end();
     QStyleOptionSlider option;
     option.initFrom(this);
     style()->drawControl(QStyle::CE_ScrollBarSlider, &option, &painter, this);
}


затем его приделываю к своему виверу ...
Код:

JScrollBar * myScrollBar = new JScrollBar();
myListView->setVerticalScrollBar(myScrollBar);


а ничего не рисует .... покажите где не так или исправте как правильно. Заранее спасибо.

добавлено спустя 2 часа 12 минут:

 решил делать через свой слайдер ... портому как сам скролл может распологаться в другом месте экрана, не обязательно быть привязаным к правому краю виджета .... а вот как поменять внешний вид слайдера ... что бы полоски не было, а был только слайдер (его передвигать буду программно) ... спасибо.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Апрель 08, 2007, 13:01 »

а если переделать стиль? QStyle?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
goer
Гость
« Ответ #2 : Апрель 08, 2007, 19:47 »

Код:

public:
    void paintEvent ( QPaintEvent * event );


А зачем открывать функцию для общего доступа? В виджете(базовом классе) она объявлена в защищенной секции.

Код:

void JScrollBar::paintEvent ( QPaintEvent * event )
{

    QPainter painter;
   painter.begin(this);
   painter.setBrush(QBrush(Qt::white, Qt::SolidPattern));
   painter.drawRect(QRect(0,0,20,20));
   painter.end();
}


Возможно этот код что то и рисует, но в любом случае

Код:

QStyleOptionSlider option;
     option.initFrom(this);
     style()->drawControl(QStyle::CE_ScrollBarSlider, &option, &painter, this);


зарисовывает скролом, определенным в текущем стайле, поверх нарисованого.

Если хочешь чтоб твой скрол перенял вид от базового скрола, то нарисуй сначала базовый скрол, а потом поверх рисуй свое. Я так делал когда надо было научить кнопку(QPushButton) размещать сверху иконку, а снизу надпись.
Нарисовать базовый скрол первым можно еще так:

Код:

void JScrollBar::paintEvent ( QPaintEvent * event )
{
   [b]QScrollBar::paintEvent ( event );[/b]

   QPainter painter;
   painter.begin(this);
   painter.setBrush(QBrush(Qt::white, Qt::SolidPattern));
   painter.drawRect(QRect(0,0,20,20));
   painter.end();
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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