Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Alp от Сентябрь 04, 2009, 19:28



Название: QSplitter customization
Отправлено: Alp от Сентябрь 04, 2009, 19:28
Хочется немного изменить стандартны QSplitter малыми силами. Отсюда вопрос: можно ли изменять ширину самого разделителя, т.е. той части за которую таскается содержимое?


Название: Re: QSplitter customization
Отправлено: Rcus от Сентябрь 04, 2009, 19:30
Непосредственно у класса QSplitter всего 4 свойства, только одно из имеет численный тип и своим названием как бы намекает что да, можно.


Название: Re: QSplitter customization
Отправлено: Alp от Сентябрь 04, 2009, 19:41
А, эта штука хэндлом зовется! Спасибо.
А положить на него картинку можно? Т.е. вот я создаю свой QSlitterHandle, перегружаю у него paintEvent... А как его установить сплиттеру?

говорят можно так:
Код
C++ (Qt)
QPixmap pixmap("test.png");
splitter->setHandleWidth(pixmap.width());
QLabel* label = new QLabel(splitter->handle(1));
label->setPixmap(pixmap);


Название: Re: QSplitter customization
Отправлено: Rcus от Сентябрь 04, 2009, 19:55
Не совсем так, в документации к QSplitterHandle указано как установить свой хендл для разделителя (наследование и переопределение фабричного метода)


Название: Re: QSplitter customization
Отправлено: Alp от Сентябрь 04, 2009, 22:45
Не совсем так, в документации к QSplitterHandle указано как установить свой хендл для разделителя (наследование и переопределение фабричного метода)
Ну приведенный пример вполне рботоспособен. Пока что не удалось одно сделать - приделать к хэндлу лауаут, что бы картинка лежала по центру сплиттера. В остальном такой трюк годится.


Название: Re: QSplitter customization
Отправлено: spectre71 от Сентябрь 05, 2009, 09:01
Не совсем так, в документации к QSplitterHandle указано как установить свой хендл для разделителя (наследование и переопределение фабричного метода)
Ну приведенный пример вполне рботоспособен. Пока что не удалось одно сделать - приделать к хэндлу лауаут, что бы картинка лежала по центру сплиттера. В остальном такой трюк годится.

Код
C++ (Qt)
class MySplitter : public QSplitter {
 Q_OBJECT
public:
 MySplitter(QWidget *parent = NULL);
 virtual ~MySplitter();
protected:
 virtual QSplitterHandle* createHandle(void);
 
};
 
class MySplitterHandle : public QSplitterHandle {
 Q_OBJECT
public:
 MySplitterHandle(Qt::Orientation orientation, QSplitter* parent);
 virtual ~MySplitterHandle();
 
protected:
 virtual void paintEvent(QPaintEvent* event);
};
 

Код
C++ (Qt)
QSplitterHandle* MySplitter::createHandle() {
 MySplitterHandle* SplitterHandle = new MySplitterHandle(orientation(), this);
...
...  
 return SplitterHandle;
}
 
void MySplitterHandle::paintEvent(QPaintEvent* event) {
...
...
}