Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: SektorCT от Февраль 28, 2016, 12:01



Название: Круглая кнопка через OpenGL?
Отправлено: SektorCT от Февраль 28, 2016, 12:01
Всем привет.
Надеюсь на совет по моей проблемме.
нужно в QT приложении создать круглый таймер, то есть типа круглой кнопки края которйо имеют какую то заданную толщину.
Этот край имеет цвет. Мы задаем какое то время и оно начинает сменой одного цвета на другйо отсчитывать время. Так же с внутренней стороны имеются засечки как на обычных чисах.
Внутри этого таймера имеется уже отображение времени обычными цифрами. Так же этот таймер имеет свойство нажатия кнопки, нажали и отсчет остановился.
Вопрос, можно ли создать такой таймер путем QT или все таки это нужно рисовтаь полностью через OpenGL?
Просьба, те кто сталкивался с чем то подобным или имеется информация, поделитесь пожалуйста.

P.S. пробвоал обычную QPushButton сделать круглой через QRegion(*rect,QRegion::Ellipse) но он убирает активные области в углах кнопки, но по сути кнопка так и остается прямоугольной края которой невидны.


Название: Re: Круглая кнопка через OpenGL?
Отправлено: Bepec от Февраль 28, 2016, 16:42
Берём математику, получаем формулу попадания в круг. Наследуемся от кнопки. Рисуем на основании данных круг, в зависимости от времени рисуем кромку и рисочки внутри. Так же рисуем три состояния от нажатия кнопки. Финита?


Название: Re: Круглая кнопка через OpenGL?
Отправлено: SektorCT от Февраль 28, 2016, 17:38
Берём математику, получаем формулу попадания в круг. Наследуемся от кнопки. Рисуем на основании данных круг, в зависимости от времени рисуем кромку и рисочки внутри. Так же рисуем три состояния от нажатия кнопки. Финита?

Благодарю за информацию. Только она слишком поверхносна. У меня по сравнению с вами как вижу опыта на много меньше. Могли бы по виджетам немного поподробнее обьяснить?


Название: Re: Круглая кнопка через OpenGL?
Отправлено: Bepec от Февраль 28, 2016, 17:59
Смотря что именно вам неясно.
Рисование происходит в функции paintEvent, отслеживание нажатие в ф-циях mousePressEvent и mouseReleaseEvent.
Задавайте вопросы, отвечу в мере своих сил.


Название: Re: Круглая кнопка через OpenGL?
Отправлено: Fat-Zer от Февраль 28, 2016, 21:31
отслеживание нажатие в ф-циях mousePressEvent и mouseReleaseEvent.
поправлю, сюда скорей всего лезть не придётся, там QAbstractButton делает всё, а будет достаточно hitButton().


Название: Re: Круглая кнопка через OpenGL?
Отправлено: SektorCT от Февраль 29, 2016, 13:16
Смотря что именно вам неясно.
Рисование происходит в функции paintEvent, отслеживание нажатие в ф-циях mousePressEvent и mouseReleaseEvent.
Задавайте вопросы, отвечу в мере своих сил.

Попробую сейчас обьяснить.
Я не совсем понимаю что будет за обьект на котором края будут по цвету перерисовыватся по времени. и то что в центре показывается время и при этом это все идет как кнопка мне тоже непонятно(
Посоветовали что нужно просто виджет сделать круглым, потмо в центр его засунуть кнопку. Но будет ли это все работать как цельынй обьект? Наверное надо для этого все в один класс запихать. Только вот не знаю пока с чего и начинать потому что кто то говорит что это будет работать а кто то говорит что не будет и надо по другому, а как непонятно.
Как писал я, опыта очень мало и не знаю с чем работать(.


Название: Re: Круглая кнопка через OpenGL?
Отправлено: Igors от Февраль 29, 2016, 15:04
OpenGL здесь совершенно ни при чем. Просто наследник QPushButton с перекрытыми paintEvent и hitButton, Напр на OSX кнопки закругленные и если нажать "в уголок" - ничего не произойдет. В общем, Вы напрасно терзаетесь в сомнениях  :)