Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нарисовать дугу 
:(
    Опции темы
meteor2312
Дата 13.9.2013, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 19.11.2010

Репутация: нет
Всего: нет



С помощью чего можно нарисовать дугу с разной толщиной на концах? 
У QPainter'a есть drawArc, но там толщина фиксированная. Есть ли какие другие способы?
PM MAIL   Вверх
Amp
Дата 13.9.2013, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 7
Всего: 17



Создай path из двух дуг и двух линий, затем залей нужным цветом.
PM MAIL   Вверх
meteor2312
Дата 13.9.2013, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 19.11.2010

Репутация: нет
Всего: нет



Я пытался использовать path, только у меня ничего не получилось... Не то, чтобы вообще ничего, то что нужно не получил. Не могу понять как проходит линия между точками. Есть ли там какие-нибудь особенности? И если не трудно, пример можно. (Qt Assistant смотрел и как раз по тому примеру пытался сделать).
PM MAIL   Вверх
Amp
Дата 13.9.2013, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 7
Всего: 17



Ай, в Qt же arcTo задается ограничивающим прямоугольником.. Просто делал такого рода дугу на JavaFX, только вот там она несколько иначе строится. Посмотрю вечерком. Но в любом случае - дугу всегда можно построить в соответствии со своей логикой с помощью множества линий.
PM MAIL   Вверх
meteor2312
Дата 13.9.2013, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 19.11.2010

Репутация: нет
Всего: нет



А про arcTo я вообще молчу... вроде задавал все правильно, но получал что-то вроде 3D: сектор, перпендикулярный задаваемой области (про 3D сделал такой вывод, потому что при изменении координат задаваемой области (есть такое свойство для виджета) смещался этот сектор таким образом как будто смещался угол обзора). Я даже не понимаю как такое вообще могло получиться  smile 
PM MAIL   Вверх
Amp
Дата 16.9.2013, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 7
Всего: 17



В лоб, линиями:
Код

path = QPainterPath()

width1 = 5.0
width2 = 20.0
length = 210.0
radius = 100.0
start_angle = 0.0;
center = QPointF(200.0, 200.0)
n_segments = 100

path.moveTo(center.x() + (radius - 0.5 * width1) * cos(radians(start_angle)), center.y() - (radius - 0.5 * width1) * sin(radians(start_angle)))

for n in xrange(0, n_segments):
    angle = start_angle + length * float(n) / n_segments;
    width =  width1 + (width2 - width1) * float(n) / n_segments;
    path.lineTo(center.x() + (radius + 0.5 * width) * cos(radians(angle)), center.y() - (radius + 0.5 * width) * sin(radians(angle)))

path.lineTo(center.x() + (radius - 0.5 * width2) * cos(radians(start_angle + length)), center.y() - (radius - 0.5 * width2) * sin(radians(start_angle + length)))

for n in xrange(0, n_segments):
    angle = start_angle + length * (1.0 - float(n) / n_segments);
    width =  width1 + (width2 - width1) * (1.0 - float(n) / n_segments);
    path.lineTo(center.x() + (radius - 0.5 * width) * cos(radians(angle)), center.y() - (radius - 0.5 * width) * sin(radians(angle)))

path.closeSubpath()


Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  arc.png 16,79 Kb
PM MAIL   Вверх
meteor2312
Дата 17.9.2013, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 19.11.2010

Репутация: нет
Всего: нет



Спасибо огромное за помощь! Все получилось
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0447 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.