模仿Qt实现类似drawline的功能~求解

cocat cocat 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
是这个?

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写~
...全文
评论 4
收藏 已收藏
分享
返回顶部
cocat
Qt 21,503 成员 26,693 内容