![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Andrewshkovskii |
![]()
Сообщение
#1
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
Есть paintEvent :
3 слайдера(их значения от 0 до 255) соединены с виджетом вот так :
Проблема : QBrush реагирует только на синюю компоненту цвета. остальные игнорирует.почему? |
|
|
SABROG |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
rgb = (this->RedSlider->value(), this->GreenSlider->value(), this->BlueSlider->value()); Похоже у меня брешь в знаниях C++. Что сия запись означает? Есть догадка, что это что-то типа объявления 3х безымянных переменных, а скобки играют ту же роль что и в математических операциях, может быть компилер и берет только последнюю. Особенно странно становится, когда я узнаю, что QRgb не класс и не структура, а алиас типа для unsigned int, в котором кстати 4 байта. Альфаканал еще. На warning'и компилятора вообще внимания не обращаешь?
Сообщение отредактировал SABROG - 1.3.2009, 16:19 |
|
|
kwisp |
![]()
Сообщение
#3
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
Andrewshkovskii,
подозреваю что PaintForTest1 член класса. если так то под него каджый раз память выделяться будет при каждом новом вызове paintEvent. а где память освобождается? QRgb rgb; rgb = (this->RedSlider->value(), this->GreenSlider->value(), this->BlueSlider->value()); QColor mycolor(rgb); PaintForTest1->setBrush(QBrush(mycolor, Qt::SolidPattern)); может легче написать
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
rgb = (this->RedSlider->value(), this->GreenSlider->value(), this->BlueSlider->value()); надо заменить на: Цитата rgb = qRgb(this->RedSlider->value(), this->GreenSlider->value(), this->BlueSlider->value()); и вроде всёподозреваю что PaintForTest1 член класса. хорошее замечание.
если так то под него каджый раз память выделяться будет при каждом новом вызове paintEvent. а где память освобождается? |
|
|
kwisp |
![]()
Сообщение
#5
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
извините великодушно.
зачем вообще этот rgb в данном случае???? нужен цвет отрисовки. это не суть важно конечно... |
|
|
SABROG |
![]()
Сообщение
#6
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
извините великодушно. зачем вообще этот rgb в данном случае???? нужен цвет отрисовки. это не суть важно конечно... Не нужен конечно, т.к. конструктор QBrush принимает QColor, а тот в свою очередь умеет r,g,b параметры брать. К тому Qt::SolidPattern стоит по-умолчанию, его не обязательно прописывать. Сообщение отредактировал SABROG - 1.3.2009, 17:25 |
|
|
kwisp |
![]()
Сообщение
#7
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
Не нужен конечно +1 на что я и намекаю. ведь это обработчик события отрисовки тут необходимо минимум лишней нагрузки дать. зачем вызывать лишние конструкторы. вот если PaintForTest1 член класса . зачем при каждой отрисовке делать ему PaintForTest1->setRenderHint(QPainter::Antialiasing, true); можно в конструкторе класса задать это свойство и все эффект тот же или я ошибаюсь в чем то? потом стрнно как вообще рисует что то.... если PaintForTest1 не разрушается по выходу из функции и ему не делают end() ..... Цитата A painter is activated by the begin() function and the constructor that takes a QPaintDevice argument. The end() function, and the destructor, deactivates it.
Сообщение отредактировал kwisp - 1.3.2009, 17:41 |
|
|
Andrewshkovskii |
![]()
Сообщение
#8
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
Ох, раскритиковали
![]() Насчет создания/уничтожения - это же локальные переменные метода, они создаются при вызове и уничтожаются после выполнения метода, насколько мне известно. Цитата ЛОКАЛЬНЫЕ переменные подразделяются на АВТОМАТИЧЕСКИЕ и СТАТИСТИЧЕСКИЕ. Автоматические переменные уничтожаются сразу после завершения того блока, в котором они описаны. Автоматические переменные описываются со словом auto. auto float с; По умолчанию все переменные являются автоматическими, поэтому префикс auto можно не указывать. Потом,если не создавать каждый раз в методое QPainter, то никакой отрисовки вообще не происходит(по крайней мере у меня, только что проверял, может я и вправду такой криворукий) Насчет выставления цветов в одном выражении спасибо!:) |
|
|
Константин |
![]()
Сообщение
#9
|
![]() Студент ![]() Группа: Участник Сообщений: 69 Регистрация: 9.2.2009 Пользователь №: 539 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
вынеси mycolor в члены класса и разгранич доступ к нему. для удобства можно добавить слоты ака setRed/setGreen/setBlue, в которых будет предварительно высчитываться нужный цвет, - их и связывать уже с соответствующими сигналами. а так ты не виджет лепишь, а какое-то монструзное незнамо-что... |
|
|
Litkevich Yuriy |
![]()
Сообщение
#10
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Насчет создания/уничтожения - это же локальные переменные метода, в том-то и дело, что у тебя это не локальная переменная метода, твой код:
А вот у Константина да. |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 7.6.2025, 16:01 |