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

cocat 2010-11-15 09:28:07
是这个?

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写~
...全文
247 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cocat 2010-11-15
  • 打赏
  • 举报
回复
我想看他底层的代码,然后模仿Qt的接口,写个画直线函数
cocat 2010-11-15
  • 打赏
  • 举报
回复
如果我想看到底层的代码,得怎么看?
dbzhang800 2010-11-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cocat 的回复:]

没人理~悲剧~
[/Quote]
别人连你想表达什么意思都不知道,怎么回复你啊。

Qt所做的,无非就是对系统底层的封装,如果你想做,需要的应该是:找本Windows编程的书,看GDI编程部分;找本Linux的书,看X11编程部分;...

各个平台都掌握之后,你再弄套接口将其统一起来
cocat 2010-11-15
  • 打赏
  • 举报
回复
没人理~悲剧~

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧