改组渲染的原语

时间:2014-11-18 16:04:39

标签: c++ qt

这只是我正在做的一项实验,但假设我们绘制了三个矩形:

void thisDialog::paintEvent(QPaintEvent *ev)
{
    rectangle = new QRect(40, 80, 40, 90);
    painter = new QPainter(this);
    brush = new QBrush(QColor(QColor::green);
    painter->fillRect(...);
    painter->drawRect(...);

    rectangle2 = new QRect(140, 80, 40, 90);
    // and draw

    rectangle3 = new QRect(240, 80, 40, 90);
    // and draw...
}

现在我想以某种方式改变画出的矩形。我的解决方案是使用std :: random_shuffle。计划是我们将所有矩形推入其矢量:

vector<QRect*> vecRect;
vecRect.push_back(rectangle);
// push back other rectangles

std::random_shuffle(vecRect.begin(), vecRect.end());

此时,矩形的顺序已被改组。唯一的问题是,虽然他们已经洗牌,但我必须以某种方式反映他们的位置,并更新屏幕上显示的内容,以便更改显而易见。所以,我建议创建一个名为shuffle的函数。我只想改变x值,因此矩形的y值和间距应该保持不变。

void shuffle()
{
    std::random_shuffle(vecRect.begin(), vecRect.end());

    for (auto it : vecRect)
    {
        // do something to the x-values in rectangle; e.g.
        it->setX(/*set something...*/);  
    }
}

要沿x轴洗牌矩形并保持y轴,并保持间距,我必须得到一个随机数并添加间距并确保它在窗口边界内说800×600。

由于我是Qt的新手,我必须知道Qt如何处理原始位置,所以我猜文档中的setX()会修改矩形的x位置。我的另一个问题是:我们如何更新位置,以便他们反映在屏幕上绘制的内容?每当我更新位置时,它似乎都没有生效。我尝试过update(),但似乎无法正常工作。

是的,我通过按键调用上述功能,所以如果按键&#39; S&#39;按下然后调用该函数。

TLDR;如何在这些矩形中移动x位置并更新它们的位置?

0 个答案:

没有答案