矩形的树结构

时间:2014-01-02 11:43:19

标签: c++ user-interface tree rectangles

我想知道哪种特定的树算法最适合 GUI 系统,对于N x (rectangles within rectangle)

到目前为止,我的实现结构如下图所示。

整个结构的简单图表:

solid base class structure

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;

};

我正在努力研究的一个简单图表,但仍然无法实现完美的例子。

derived class with another components

我当前实现中的问题是,如果我选择一个特定的对象,让我们说例如一个按钮与文档中的另一个按钮重叠(我称之为带有滚动条的矩形为document),它会有也选择文件。我尝试反向迭代它,当第一次按下鼠标按钮时,它将锁定任何鼠标点击事件,直到再次释放鼠标按钮。但是,如果我要创建另一个将再次包含另一个内容的类,我会再次重新实现代码,这也会导致我在组件方面出现其他一些问题。对于带递归的矩形,整个迭代的最佳解决方案是什么?

更新

  

为什么你的图书馆有这些问题?

- 因为我只开始编码大约4个月。而且我不是一个神奇的人来回答我将要遇到的所有数学问题。

  

它以何种方式独特?

-IDK,之前没有看到任何GUI(或相关)代码。

  

你能说明代码中是怎么发生的吗?

层1

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();
    }
}

第3层

class swcApplication
{
    std::vector<spObject> contents;
};

void swcApplication::execute()
{
    for (auto &i : boost::adaptors::reverse(contents))
    {
        //fetch inputs
        i->update();
    }
}

我反向迭代它,因为我绘制(绘制)每个矩形,如 Painter的算法

0 个答案:

没有答案