Qt — Не могу закрасить значения оси

Я кодирую окно графика для ввода в реальном времени в QtCreator, с волнами данных, которые циклически перезаписывают себя с заданным пользователем периодом.

Фактический плоттер и инициализация оси работают отлично, но у меня возникают некоторые проблемы с обновлением оси времени в конце каждого периода. Я думал, что стирание всех данных в области метки и повторное рисование с использованием новых значений будет работать, но вместо этого вся ось будет стерта в конце первого периода. Я подозреваю некоторую проблему с моим использованием QPainter.

Первый пост, успокойся на мне.

void T_AxisWidget :: initAxis (double window_period) {
period = window_period;
t_pixmap = QPixmap (size ());
t_pixmap.fill (Qt :: черный);

QPainter painter(&t_pixmap);
painter.initFrom(this);
painter.setPen(Qt::red);
painter.drawLine(0, 0, size().width(), 0);
painter.drawLine(0, 0, 0, TICK_LENGTH); //always draw first tick at origin
int tick_interval = size().width()/(num_ticks);
int remainder = (size().width()%(num_ticks))-1; //pixels to be skipped to cover entire axis

painter.drawText(0, TICK_LENGTH+2, tick_interval/2, size().height()-TICK_LENGTH+2,
Qt::AlignLeft | Qt::AlignTop,
QString::number(0));

qDebug() << "width = " << size().width();
qDebug() << "interval = " << size().width()/(num_ticks);

for(int i=tick_interval; i<=size().width()-tick_interval; i+=tick_interval) {
if (remainder>0) {
++i; //space ticks an extra pixel apart initially to achieve an even spread
--remainder;

qDebug() << "remainder = " << remainder;
qDebug() << "tick = " << i;
}
painter.drawLine(i, 0, i, TICK_LENGTH);
painter.drawText(i-(tick_interval/2), TICK_LENGTH+2, tick_interval, size().height()-TICK_LENGTH+2,
Qt::AlignHCenter | Qt::AlignTop,
QString::number((period/(double)num_ticks)*(i/tick_interval)));
}
painter.drawLine(size().width()-1, 0, size().width()-1, TICK_LENGTH);
painter.drawText(size().width()-tick_interval/2, TICK_LENGTH+2, tick_interval/2, size().height()-TICK_LENGTH+2,
Qt::AlignRight | Qt::AlignTop,
QString::number(period)); }

void T_AxisWidget :: setTValues ​​(int multiplier) {
двойной старт = период * множитель;
int tick_interval = period / num_ticks;

QPainter painter(&t_pixmap);
painter.initFrom(this);
painter.setPen(Qt::red);
QRect eraseblock(0, TICK_LENGTH+2, size().width(), size().height());
painter.eraseRect(eraseblock);

painter.drawText(0, TICK_LENGTH+2, tick_interval/2, size().height()-TICK_LENGTH+2,
Qt::AlignLeft | Qt::AlignTop,
QString::number(start));for(int i=1; i<num_ticks; i++) {
painter.drawText(i*tick_interval-(tick_interval/2), TICK_LENGTH+2, tick_interval, size().height()-TICK_LENGTH+2,
Qt::AlignHCenter | Qt::AlignTop,
QString::number(start+(i*period/(double)num_ticks)));
}
painter.drawText(size().width()-(tick_interval/2), TICK_LENGTH+2, tick_interval/2, size().height()-TICK_LENGTH+2,
Qt::AlignRight | Qt::AlignTop,
QString::number(period*multiplier));

}

void T_AxisWidget :: paintEvent (QPaintEvent * / * event * /) {
QStylePainter Painter (это);
painter.drawPixmap (0, 0, t_pixmap); }

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]