模仿Qt实现类似drawline的功能~求解
是这个?
还是这个?
我完全不懂Qt,上头只是叫我模仿Qt中的算法,没头绪,得用纯C写~
void QPaintEngine::drawLines(const QLine *lines, int lineCount)
{
struct PointF {
qreal x;
qreal y;
};
struct LineF {
PointF p1;
PointF p2;
};
Q_ASSERT(sizeof(PointF) == sizeof(QPointF));
Q_ASSERT(sizeof(LineF) == sizeof(QLineF));
LineF fl[256];
while (lineCount) {
int i = 0;
while (i < lineCount && i < 256) {
fl[i].p1.x = lines[i].x1();
fl[i].p1.y = lines[i].y1();
fl[i].p2.x = lines[i].x2();
fl[i].p2.y = lines[i].y2();
++i;
}
drawLines((QLineF *)(void *)fl, i);
lines += i;
lineCount -= i;
}
}
还是这个?
void QPainter::drawLines(const QLine *lines, int lineCount)
{
#ifdef QT_DEBUG_DRAW
if (qt_show_painter_debug_output)
printf("QPainter::drawLine(), line count=%d\n", lineCount);
#endif
Q_D(QPainter);
if (!d->engine || lineCount < 1)
return;
if (d->extended) {
d->extended->drawLines(lines, lineCount);
return;
}
d->updateState(d->state);
uint lineEmulation = line_emulation(d->state->emulationSpecifier);
if (lineEmulation) {
if (lineEmulation == QPaintEngine::PrimitiveTransform
&& d->state->matrix.type() == QTransform::TxTranslate) {
for (int i = 0; i < lineCount; ++i) {
QLineF line = lines[i];
line.translate(d->state->matrix.dx(), d->state->matrix.dy());
d->engine->drawLines(&line, 1);
}
} else {
QPainterPath linePath;
for (int i = 0; i < lineCount; ++i) {
linePath.moveTo(lines[i].p1());
linePath.lineTo(lines[i].p2());
}
d->draw_helper(linePath, QPainterPrivate::StrokeDraw);
}
return;
}
d->engine->drawLines(lines, lineCount);
}
我完全不懂Qt,上头只是叫我模仿Qt中的算法,没头绪,得用纯C写~
...全文
相关推荐
QT,用Qpainter实现绘制心电波形图
用Qpainter实现绘制心电波形图。代码简单,数据随机产生,波形图每秒跳动一次
QT实现橡皮擦功能.rar
QT实现的,环境是QT Creater 4.10.1 对应的QT版本是qt5.13.2.实现的功能是打开图片,画笔功能,橡皮擦功能,保存图片
QT画图工具的简单实现
QT绘图是学习QT必不可少的技能,以下是画图的简单实现,仅供需要的人士参考。
Qt实现仿QQ截图,带绘图,撤回功能!.zip
使用c++ Qt实现的仿QQ截图程序,已经实现绝大部分功能,其中包括窗口移动、伸缩、绘图(绘制矩形,绘制椭圆,绘制箭头,绘制画笔、绘制文字)、撤回、保存图片、取消截图、完成截图(自动复制到粘贴板)。
QT实现动态波形的实时显示
QT上实现动态波形的显示,使用定时器来模拟数据的变化,在qt界面上实时显示当前的数值变化,可以通过波形更加清晰直观的了解数据的变化趋势。


