这只是我正在做的一项实验,但假设我们绘制了三个矩形:
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位置并更新它们的位置?