我想知道哪种特定的树算法最适合 GUI 系统,对于N x (rectangles within rectangle)
到目前为止,我的实现结构如下图所示。
swcObject
是所有小部件的基类,即buttons, textboxes, labels, etc...
w / c中的每一个都可以容纳另一种类型,我将其称为组件。例如,我会将scrollbar
的三个按钮(即上/左,下/右和拇指)称为组件,将document
称为滚动条(垂直和水平)作为组件,而可添加的对象(可以包含按钮,标签,文本框,文本或可以再次包含其他文档)是内容
class swcObject :
public swcRectangle
{
public:
swcObject();
protected:
addComponent(swcObject *component);
private:
std::vector<swcObject*> components;
};
class swcDocument :
public swcObject
{
public:
typedef std::shared_ptr<swcObject> spObject;
swcDocument();
addContent(const spObject& object);
protected:
std::vector<spObject> vspContents;
};
我正在努力研究的一个简单图表,但仍然无法实现完美的例子。
我当前实现中的问题是,如果我选择一个特定的对象,让我们说例如一个按钮与文档中的另一个按钮重叠(我称之为带有滚动条的矩形为document
),它会有也选择文件。我尝试反向迭代它,当第一次按下鼠标按钮时,它将锁定任何鼠标点击事件,直到再次释放鼠标按钮。但是,如果我要创建另一个将再次包含另一个内容的类,我会再次重新实现代码,这也会导致我在组件方面出现其他一些问题。对于带递归的矩形,整个迭代的最佳解决方案是什么?
更新
为什么你的图书馆有这些问题?
- 因为我只开始编码大约4个月。而且我不是一个神奇的人来回答我将要遇到的所有数学问题。
它以何种方式独特?
-IDK,之前没有看到任何GUI(或相关)代码。
你能说明代码中是怎么发生的吗?
class swcObject
{
std::vector<swcObject*> components;
};
void swcObject::update()
{
for (auto &i : components)
{
//fetch inputs
i->update();
}
}
class swcDocument
{
std::vector<spObject> contents;
};
void swcDocument::update()
{
for (auto &i : boost::adaptors::reverse(contents))
{
//fetch inputs
i->update();
}
}
class swcApplication
{
std::vector<spObject> contents;
};
void swcApplication::execute()
{
for (auto &i : boost::adaptors::reverse(contents))
{
//fetch inputs
i->update();
}
}
我反向迭代它,因为我绘制(绘制)每个矩形,如 Painter的算法