crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Создание property для виджета, Q_PROPERTY
zaytsewa
  опции профиля:
сообщение 29.4.2011, 10:54
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 55
Регистрация: 20.4.2011
Пользователь №: 2620

Спасибо сказали: 1 раз(а)




Репутация:   0  


Есть собственный 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;
};


slider.cpp

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());
}


myform.ui

 <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 );


стили всё равно не применяются...

Почему-то не получается(т.е. есть стили не применяются), подскажите где ошибка.

может ошибка в qss?

QSlider[ type = "TYPE1" ]:handle
{
    background-image: url(:/img/slider_green.png);
    width: 10.0px;
    background-repeat: no-repeat;
}


да, похоже в qss

сразу поняла, когда написала))

но вопрос всё равно остался

как грамотно написать в qss, который применяется к Slider

QWidget[ type = "NORMAL" ].QSlider:handle
{
  background-image: url(:/Images/CommonStateZone/kren_crawler_green.png);
  width: 10.0px;
  background-repeat: no-repeat;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 29.4.2011, 11:01
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


правильнее думаю было бы так:
.Slider
{
  background-image: url(:/Images/CommonStateZone/kren_crawler_green.png);
  width: 10.0px;
  background-repeat: no-repeat;
}


Сообщение отредактировал wiz29 - 29.4.2011, 11:01
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zaytsewa
  опции профиля:
сообщение 29.4.2011, 11:30
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 55
Регистрация: 20.4.2011
Пользователь №: 2620

Спасибо сказали: 1 раз(а)




Репутация:   0  


мне нужно в зависимости от разных опций 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;
}




Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 29.4.2011, 11:33
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


зачем ты в qss QSlider приплетаешь, он тут никаким боком не должен участвовать...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zaytsewa
  опции профиля:
сообщение 29.4.2011, 13:24
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 55
Регистрация: 20.4.2011
Пользователь №: 2620

Спасибо сказали: 1 раз(а)




Репутация:   0  


мне нужно изменить стиль ручки слайдера
может так правильно Slider[ type = "TYPE3" ]#hSlider:handle (по имени объекта)


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 29.4.2011, 13:47
Сообщение #6


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Цитата(zaytsewa @ 29.4.2011, 14:24) *
может так правильно Slider[ type = "TYPE3" ]#hSlider:handle (по имени объекта)

если имя встроенного объекта слайдера соответствует ("hSlider", не путать с именем переменной) то тогда нужно написать следующее
Slider[ type = "TYPE3" ] QSlider#hSlider:handle....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zaytsewa
  опции профиля:
сообщение 29.4.2011, 14:43
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 55
Регистрация: 20.4.2011
Пользователь №: 2620

Спасибо сказали: 1 раз(а)




Репутация:   0  


спасибо)

проблема была в том, что после изменения опции нужно перезагружать файл стиля
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.4.2011, 16:38
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


вообще макрос Q_PROPERTY нужно писать в объявлении класса. Из документации:
Цитата
Свойство ведёт себя, как член данных класса, но оно имеет дополнительные возможности, доступные через мета-объектную систему
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.9.2019, 19:38