gpt4 book ai didi

qt - 当用户打开菜单或调整窗口大小时,QMainWindow 停止接收 QEvent::UpdateRequest

转载 作者:行者123 更新时间:2023-12-02 03:43:35 26 4
gpt4 key购买 nike

MyWindow 继承自 QMainWindow。 MyWindow 包含一个显示动画的 QGLWidget。

问题是每当我打开菜单或调整窗口大小时动画都会暂停。

动画是通过定期调用QCoreApplication::postEvent(this, new QEvent(QEvent::UpdateRequest))实现的,然后在每次窗口收到QEvent::UpdateRequest时调用重绘,像这样:

bool MyWindow::event(QEvent *event)
{
qDebug() << event;
switch (event->type())
{
case QEvent::UpdateRequest:
render();
return true;
default:
return QMainWindow::event(event);
}
}

qDebug() 可以看出,当打开菜单或调整窗口大小时,窗口将停止接收更新请求事件。

QMainWindow/QWidget上是否有设置让它继续接收更新请求事件?还是有更好的方法来实现动画?

编辑:我在 Mac OS X 上。

最佳答案

这可能是一个 Qt 错误。我会调查的。

唉,您的代码过于复杂了。

  1. postEvent 应该简单地替换为 this->update()。它在幕后为您发布事件。

  2. 可以简单地将 QTimer 实例的信号连接到 widget, SLOT(update())。如果要在 QObject 实例上保存,请使用 QBasicTimer 并重新实现 timerEvent,如下所示: void MyWidget::timerEvent(QTimerEvent* ev) { 如果 (ev.timerId() == m_timer.timerId()) update(); }

  3. 无需处理 event() 重新实现。只需重新实现 paintEvent() - 这就是它的用途。

关于qt - 当用户打开菜单或调整窗口大小时,QMainWindow 停止接收 QEvent::UpdateRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18600452/

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