Есть собственный custom-widget
Необходимо зарегистрировать для него property, чтобы устанавливать разные стили на элемент виджета
slider.h
#ifndef SLIDER_H
#define SLIDER_H
#include "ui_slider.h"
#include <QWidget>
#include <QtGui>
enum ValueType
{
TYPE1,
TYPE2,
TYPE3
};
Q_PROPERTY(int type WRITE type READ type)
class Slider : public QWidget
{
public:
Slider(QWidget * parent = 0, Qt::WindowFlags f = 0);
void setMinimum( float min );
void setMaximum( float max );
void setValue( float val);
void setType( ValueType type);
ValueType getType() const;
private:
Ui_Slider* ui;
};
void Slider::setType( ValueType type)
{
switch ( type )
{
case TYPE1: setProperty( "type", "TYPE1" ); break;
case TYPE2: setProperty( "type", "TYPE2" ); break;
case TYPE3: setProperty( "type", "TYPE3" ); break;
}
}
ValueType Slider::getType() const
{
return static_cast<ValueType>(property( "type" ).toInt());
}
<widget class='Slider" name="vSlider" native="true">
<property name="type">TYPE1</property>
<property name="geometry">
<rect>
<x>285</x>
<y>10</y>
<width>91</width>
<height>271</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>40</width>
<height>100</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>400</width>
<height>2000</height>
</size>
</property>
</widget>
ui->vSlider->setType( TYPE1 );
QSlider[ type = "TYPE1" ]:handle
{
background-image: url(:/img/slider_green.png);
width: 10.0px;
background-repeat: no-repeat;
}
QWidget[ type = "NORMAL" ].QSlider:handle
{
background-image: url(:/Images/CommonStateZone/kren_crawler_green.png);
width: 10.0px;
background-repeat: no-repeat;
}
правильнее думаю было бы так:
.Slider
{
background-image: url(:/Images/CommonStateZone/kren_crawler_green.png);
width: 10.0px;
background-repeat: no-repeat;
}
мне нужно в зависимости от разных опций type класса Slider менять цвет элемента handle у QSlider, который входит в состав класса Slider
поэтому мне нужно что-то типа
Slider[ type = "TYPE1" ] > QSlider:handle
{
background-image: url(:/img/slider_green.png);
width: 10.0px;
background-repeat: no-repeat;
}
Slider[ type = "TYPE2" ] > QSlider:handle
{
background-image: url(:/img/slider_yell.png);
width: 10.0px;
background-repeat: no-repeat;
}
Slider[ type = "TYPE3" ] > QSlider:handle
{
background-image: url(:/img/slider_red.png);
width: 10.0px;
background-repeat: no-repeat;
}
зачем ты в qss QSlider приплетаешь, он тут никаким боком не должен участвовать...
мне нужно изменить стиль ручки слайдера
может так правильно Slider[ type = "TYPE3" ]#hSlider:handle (по имени объекта)
спасибо)
проблема была в том, что после изменения опции нужно перезагружать файл стиля
вообще макрос Q_PROPERTY нужно писать в объявлении класса. Из документации:
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)