crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Настройка цвета и размера виджетов
eXtremal
  опции профиля:
сообщение 25.5.2009, 14:47
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 25.5.2009
Пользователь №: 770

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




Репутация:   0  


С Qt столкнулся недавно совсем, поэтому опыта ещё никакого. Есть два вопроса:
1. Требуется динамически изменять цвет кнопки во время работы приложения, в том числе реализовать мерцание этой кнопки.. с реализацией вроде всё ясно(запуск таймера и обработка его сигнала), а вот сам процесс изменение цвета не понятен.. единственное что нашёл это вызов типа setStyleSheet("background-color: green"). Но такой вариант не очень нравится, зачем заставлять Qt разбирать строку, когда было бы проще просто передать нужный цвет в виде RGB ? Ещё где-то видел, что могут быть проблемы со стилями WinXP/Vista, там чтобы изменить цвет придётся менять стиль на классический.
Подскажите plz наиболее правильный и простой способ менять цвета виджетов во время выполнения.

2. Есть QGridLayout также с кнопками внутри, требуется чтобы при изменении размеров окна кнопки также увеличивались как по горизонтали, так и по вертикали, но не более какого-то определенного размера. В какой раздел документации смотреть, чтобы понять как реализовать это ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 25.5.2009, 15:13
Сообщение #2


Дмитрий Трошин
****

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

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




Репутация:   6  


Цитата(eXtremal @ 25.5.2009, 15:47) *
а вот сам процесс изменение цвета не понятен..

paintEvent(QPaintEvent *event)
QStyleOption opt << где-то тут палитра цветов.
+
painter.drawComplexControl(QStyle::**, opt);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.5.2009, 15:26
Сообщение #3


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

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

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




Репутация:   94  


А я бы подругому сделал:
Делаю наследника от кнопки,
в ней в делаю слот в котором запускаю таймер,
в обработчике таймера
-- нечётный раз, меняю палитру кнопки на зарание созданную (исходную запоминаю)
-- четный раз, меняю палитру кнопки на исходную

eXtremal, ПРАВИЛО:
Одна проблема/вопрос - одна тема.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 25.5.2009, 15:41
Сообщение #4


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


eXtremal,
1. QWidget::setPalette(const QPalette&) посомтри paintEvent(QPaintEvent*)
2. sizePolicy expanded Если не ошибаюсь и set(Minimum\Maximum)Size(const QSize&)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 25.5.2009, 19:09
Сообщение #5


Дмитрий Трошин
****

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

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




Репутация:   6  


Цитата(Litkevich Yuriy @ 25.5.2009, 16:26) *
eXtremal, ПРАВИЛО:
Одна проблема/вопрос - одна тема.

а по моему он нормально скомпоновал вопросы - в топик-стартмесаге.
вот если бы размазывал по ветке, было бы ой. а так норм.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eXtremal
  опции профиля:
сообщение 25.5.2009, 20:31
Сообщение #6


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 25.5.2009
Пользователь №: 770

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




Репутация:   0  


Цитата(kwisp @ 25.5.2009, 16:41) *
eXtremal,
1. QWidget::setPalette(const QPalette&) посомтри paintEvent(QPaintEvent*)
2. sizePolicy expanded Если не ошибаюсь и set(Minimum\Maximum)Size(const QSize&)


Пока что с первым вопросом разбираюсь, унаследовался от QPushButton, определил свою функцию paintEvent, из исходников Qt скопировал код разбавив своим, получилось вот так(вариант не окончательный, так эксперименты):

void QButtonMod::paintEvent(QPaintEvent *event)
{
  QStylePainter p(this);
  QStyleOptionButton option;
  initStyleOption(&option);

  QColor X;
  X.setRgb(255, 0, 0);
  option.palette = QPalette(X);
  
  p.drawControl(QStyle::CE_PushButton, option);
}


Как и предполагал, работает только с классическим стилем windows, если использовать стиль висты палитра игнорируется. Как это обойти не придумали пока ещё ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 25.5.2009, 20:39
Сообщение #7


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


eXtremal,
воспользуйся поиском по форуму.
исходники библиотеки интеренсно смотреть но передирать их думаю не зачем.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 27.12.2024, 1:21