Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: QT: Создание своего класса  (Прочитано 13153 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ann_nef
Помогающий

ru
Offline Offline
Пол: Женский

« : 14-12-2016 11:34 » 

Здравствуйте. Опять к вам за помощью.

Сначала задача:
1.надо изобразить светофор с несколькими огнями ( от 1 до 4 )
2.надо менять цвет огней
3.надо реализовать мигающий огонь.

Теперь, что реализовано:
1. Из svg-файла прочитано,разобрано(parse)  и отображено на сценарии, используя QGraphicsItem.
   В результате есть адреса на сценарии всех огней.
2. Могу менять цвет
3. С помощью таймера, описывая свой класс,как public QObject  , мигает огонь.

Но, пп 2 и 3- для одного огня.

Как бы вы описали класс (светофор) или классы(светофор и огонь) для реализации этой задачи?
Как бы реализовали мигание?
Как работает класс public QObject? только в нём у меня таймер работает - но ...

Пока программу не прикрепляю.
Жду помощи
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 15-12-2016 04:59 » 

ann_nef, если задача - просто сделать окно со светофором, то я бы не стал заморачиваться с QGraphicsItem

Кидаешь на виджет вертикальный компоновщик, туда три QLabel . И на выбор - либо отображать png , меняя прозрачность, но ещё проще - стилем и прозрачностью имхо


Затем прикручиваем логику. Можно и по таймеру, не вопрос. (При определённом зуде можно логику в отдельном потоке запустить Отлично ) По срабатыванию таймера в классе светофора вычисляем текущее состояние и отображаем. Плавное переключение прозрачности можно запустить при помощи QPropertyAnimation

Если есть исходники, могу глянуть, что не работает

если что, у меня сейчас   Qt 5.7.0
« Последнее редактирование: 15-12-2016 05:13 от Алексей++ » Записан

ann_nef
Помогающий

ru
Offline Offline
Пол: Женский

« Ответ #2 : 15-12-2016 07:29 » 

Спасибо Алексей за ответ.
Светофор(ы) - это только часть элеметов на мнемосхеме станции метро. Решено не мной, что схема описывается в SVG-файле.
После парсинга всё отображается на сцене и известны адреса эл-тов.
Теперь к светофору. У него есть:
1 номер
2. имя отображаемое несколькими цветами+мигание этого имени(есть соотв. адрес текста на сценарии типа QCraphicsTextItem)
3.текст состояния тоже цвет+мигание(есть соотв. адрес текста на сценарии QCraphicsTextItem)
2.количество огней(голов) светофора
Каждый огонь(голова) светора:
1.цвет
2.мигание
3.№ светофора
4. адрес на сценарии nQGraphicsItem

Я читаю протокол событий из  файла и они должны отображаться на сценарии, типа
Светофор ММ3 - Красный-низ, Желтый-верх, АЛС - на экране дб один огонь красный, другой жёлтый, а цвет названия светофора белый.

Вопрос самый первый как бы вы написали класс или классы, описывающий светофор?
Потом будут другие вопросы.
Попытаюсь минимизировать свою программку и прицеплю её тогда.
Записан
ann_nef
Помогающий

ru
Offline Offline
Пол: Женский

« Ответ #3 : 15-12-2016 07:31 » 

В догонку - мигание без таймера сделать как-то можно?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 15-12-2016 07:53 » 

видимо, содержимое файла SVG в логике не особо важно (а ещё - я пока что не знаю, что это за файл Отлично )

класс светофора я представляю примерно так

Код:
//лампа
class CLed
{
    bool isExists;//существует
    bool isOn;//сейчас горит

//+ обвеска для запуска анимации включения/гашения/мигания на основе QPropertyAnimation
};

//светофор - набор ламп и дополнительная информация
CLightDevice
{
   CLed r;
   CLed y;
   CLed g;

   QString name;
};

Мигание без таймера - к примеру, зациклить анимацию QSequentialAnimationGroup - зажигание+гашение
Записан

Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 15-12-2016 13:26 » new

видимо, содержимое файла SVG в логике не особо важно (а ещё - я пока что не знаю, что это за файл Отлично )

класс светофора я представляю примерно так...
SVG - это, вроде бы, файл векторной графики в формате XML?

Я так понял: дело не в светофоре, а в схеме со светофорами, иными словами требуется создать в окне приложения некое поле обзора с перемещением, масштабированием... В нём нарисовать схему и светофоры, которые являются интерактивными.

Реализовать можно по разному, если целью является изучение Qt, то можно было бы сделать собственный класс такого поля, а потом активно использовать QPaintEvent и QTimer.

Если цель - скорость, то углубляться в QGraphicsView (Пишу на память, могу ошибиться в названии).
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines