crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Вопрос по функции drawText
AD
  опции профиля:
сообщение 28.7.2009, 14:42
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


У объекта painter есть функция отрисовки текста. Каким образом можно заставить ее затирать прежнее значение? При отрисовке значения пересечения визира с графиков значение выводится несколько(а то и несколько сот) раз, из-за чего в итоге не разобрать значения.
И опять же сдвиг точки, что не радует.... :(
[attachment=724:test1.JPG]
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 28.7.2009, 15:22
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

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




Репутация:   5  


нужно рисовать в риал-тайме и делать апдейт регионов, где рисовал при перерисовке.

покажи код как рисуешь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 28.7.2009, 15:28
Сообщение #3


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

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

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




Репутация:   23  


AD,
пользуй не просто drawText а
fillRect
затем
drawText() в тотже rect что и затер фоном:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 28.7.2009, 15:32
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(ufna @ 28.7.2009, 16:22) *
нужно рисовать в риал-тайме и делать апдейт регионов, где рисовал при перерисовке.

покажи код как рисуешь.

:) Ну реальное время в данном контексте немного странно звучит. Конечно, перерисовку делаю.
/// Отрисовка графика
void GraphicDisplay::paintEvent(QPaintEvent* events)
{
    painter.begin(this);

    painter.setWindow(paramsDisplay -> rect());
    painter.setFont(QFont("Tahoma", 8, Qt::SolidLine));
    painter.setPen(Qt::black);

    drawGrid(&painter);
    drawCurves(&painter);

    painter.end();
}

/// Отрисовка графика
void GraphicDisplay::drawCurves(QPainter* painter)
{
// .....
                    painter -> drawLine(polyline.last(), pnt),
                    viewCoordViewfinder(painter, data, j, pnt);
// ......
}

/// Отображение координат пересечения с визиром
void GraphicDisplay::viewCoordViewfinder(QPainter* painter, const QVector<SpecPointF>& data, int index,
                                        const QPointF& pnt)
{
    if(!v_viewfinderAction -> isChecked() && !h_viewfinderAction -> isChecked())
        return;
    double graphic_x = data[index].x(), graphic_y = data[index].y();
    foreach(VFFrame* pf, viewfinderList)
    {
        int frame_x = pf -> x(), frame_y = pf -> y();
        double graph_x = pnt.x(), graph_y = pnt.y();
        if(pf -> frameShape() == QFrame::VLine && v_viewfinderAction -> isChecked())
            if(fabs(frame_x - graph_x) <= 3.)
            {
                QPointF coord(pnt.x() + 40., pnt.y() - 1.);
                QPen oldPen(painter -> pen());
                painter -> setPen(Qt::black);
                painter -> setBrush(oldPen.color());
                QRect cycle_rect(QPoint(pnt.x() - 1, pnt.y() - 1),
                                 QPoint(pnt.x() + 1, pnt.y() + 1));
                painter -> drawEllipse(cycle_rect);
                painter -> drawText(coord, QString::number(graphic_y));
                painter -> setPen(oldPen);
            }
        // ..................
    }    
}


Сообщение отредактировал AD - 28.7.2009, 15:33
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 28.7.2009, 17:15
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Пока ничего не помогло. filRect - не помог.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 29.7.2009, 9:09
Сообщение #6


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

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

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




Репутация:   23  


AD,
как так не помогло.
???
m_painter->begin(this);
m_painter->fillRect(CSKMain::cellRects[CSKSession::e_TIME],CSKConf::colorByStation(pointState));
m_painter->setFont(CSKConf::time_font());
m_painter->drawText(CSKMain::cellRects[CSKSession::e_TIME],Qt::AlignCenter,point->Time().toString(CSKConf::timeFormat));
m_painter->end();

где
CSKMain::cellRects[CSKSession::e_TIME] - QRect области рисования текста
CSKConf::colorByStation(pointState) - цвет фона (у тебя это может быть кусок картинки фона)
CSKConf::time_font() - цвет времени
point->Time().toString(CSKConf::timeFormat) - QString времени
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 30.7.2009, 11:18
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Возможно, я и ошибся, возможно, руки кривоваты. А может быть, что при большом масштабе, точки пересечения, находящиеся рядом накладываются друг на друга, или же не точка пересечения, распознать такие ситуации не очень знаю как - чтобы выделять точки начала и конца отрезка. При приближении вырисовывается нормально, но при сильном приближении точка исчезает. Видимо условие
if(fabs(frame_x - graph_x) <= 3.)
дает ложь. Алгоритм не очень хороший, насколько мне видно. Как его изменить на более предсказуемый, пока не знаю!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 30.7.2009, 12:00
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Основное непонимание, почему есть сдвиг между положением визира и отрисовываемой точкой. Как определить, что имеется пересечение отрезком.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 30.7.2009, 14:53
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Никак не могу понять, почему есть смещение рисуемой точки от визира? Подскажите, пожалуйста, где возможна ошибка?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 31.7.2009, 11:07
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


kwisp, посмотрел более внимательно, fillRect() действительно помог, я ошибся. Спасибо. Задача разнести текст при большом масштабе, когда точки находятся рядом. Сделать отметку точек ровно в точке пересечения, а не со смещением. Пока что у меня это не получается.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 28.3.2024, 16:40