C++ 混合渲染原语

C++ 混合渲染原语,c++,qt,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->drawRec

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

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\u shuffle。我们的计划是把所有的矩形都推到一个向量中:

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

std::random_shuffle(vecRect.begin(), vecRect.end());
要沿x轴移动矩形并保持y轴,并保持其间的间距,我必须获得一个随机数并添加间距,并确保它在窗口边界内,比如800x600

因为我是Qt新手,所以我必须知道Qt是如何处理基元位置的,所以我猜文档中的setX会修改矩形的x位置。我的另一个问题是:我们如何更新位置,使它们反映在屏幕上绘制的内容上?每当我更新位置时,它似乎不会生效。我尝试过更新,但似乎不起作用

顺便说一句,我通过按键调用前面提到的函数,因此,如果按下“S”键,则调用该函数


TLDR;如何洗牌这些矩形中的x位置并更新其渲染位置?

在哪里设置矩形的值?看起来您的绘画事件与上面所示完全相同?memoryleak??我在绘制事件中设置矩形的位置。那合法吗?是的当然还有洗牌本身你在哪里做的?你在画画活动结束时钻研矩形吗?我在一个叫做shuffle的单独函数中进行洗牌;矩形实际上在dialog类下声明为private,并在paintEvent函数中实例化。在该功能中不会删除它们;这是因为我想在shuffle函数中使用它们。好的!因此,问题在于,每次输入paintevent时,都会创建一个新的矩形,这样洗牌就没有效果了!例如,尝试在构造函数中只创建一次,然后在paintevent中使用setX/setY更改位置。。。
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...*/);  
    }
}