【发布时间】:2017-03-28 14:29:32
【问题描述】:
我目前正在开发一个执行一些计算几何的库。为了可视化我的算法结果(并在交互式环境中使用它们),我决定在Qt 中编写一个小查看器/工具,但将核心逻辑与该查看器分开。所以现在我有一个 QGraphicsScene 包含一堆不同的项目,但是,我只对 QGraphicsRectItems 感兴趣:
for(auto* item : scene) {
if(QGraphicsRectItem* c = qgraphicsitem_cast<QGraphicsRectItem*>(item)) {
// ... do stuff
}
}
我的库目前定义了我自己的类型
struct rectangle {
double x,y;
double w,h;
};
以及适用于它们的算法。想象一下我有一个方法
void layout(std::vector<rectangle>& rs) { ... }
它采用任意定位的rectangles 的集合并将它们彼此相邻放置。
我现在想在场景中将这个算法与我的QGraphicsRectItems 一起使用。你会怎么做?我在想我可以将QGraphicsItems 转换为rectangles,将矩形存储在向量中并使用std::unordered_map<rectangle*,QGraphicsRectItem*> 来跟踪它们属于哪个项目。处理完rectangles 后,我可以遍历向量并将更改应用于场景中的项目。
这是要走的路吗?你将如何解决这个问题?也许我的设计从一开始就有缺陷?
【问题讨论】:
-
layout只是改变值,还是移动矩形索引?