gpt4 book ai didi

c++ - 画椭圆延迟再画一个

转载 作者:行者123 更新时间:2023-11-30 03:14:55 24 4
gpt4 key购买 nike

我需要画一个椭圆,并在延迟一段时间后画另一个。我在执行此操作时遇到了问题。

这是我实际执行的代码的简化版本,但我相信这会帮助我解决问题

这是代码。

MyView::MyView()
{
sc = new QGraphicsScene();
this->setSceneRect(0,0,800,600);
this->setFixedSize(800,600);
this->setStyleSheet("QScrollBar {height:0px;}");
this->setStyleSheet("QScrollBar {width:0px;}");
sc->setSceneRect(0,0,800,600);
this->setScene(sc);

}

void MyView::mousePressEvent(QMouseEvent *event)
{
sc->addEllipse(event->x(),event->y(),10,10,QPen(),QBrush(Qt::red));
int i=0;
while(i < 1000000000) // SIMULATING DELAY
i++; //
sc->addEllipse(event->y(),event->x(),10,10,QPen(),QBrush(Qt::blue));
}
class MyView : public QGraphicsView
{
public:
MyView();
QGraphicsScene *sc;
public slots:
void mousePressEvent(QMouseEvent *event);
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyView wv;
wv.show();

return a.exec();
}

第一个椭圆直到一段时间结束才出现,第二个出现时间有多长并不重要。始终同时绘制两个椭圆。

最佳答案

在 GUI 的主线程中,您不应该有占用太多时间的任务,因为它们会阻塞事件循环,从而阻止 GUI 自己的工作被执行。在您的情况下,while 循环可以用 QTimer 代替:

void MyView::mousePressEvent(QMouseEvent *event)
{
QPointF p = mapToScene(event->pos());
sc->addEllipse(QRectF(p, QSizeF(10, 10)), QPen(), QBrush(Qt::red));
// 1000 is the delay in ms
QTimer::singleShot(1000, this, [this, p](){
sc->addEllipse(QRectF(p, QSizeF(10, 10)), QPen(), QBrush(Qt::blue));
});
}

关于c++ - 画椭圆延迟再画一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57385419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com