Qt学视觉 2024-06-11 10:34 采纳率: 0%
浏览 78

Qt3DExtras::Qt3DWindow显示异常

Qt3DExtras::Qt3DWindow通过QWidget::createWindowContainer转成QWidget后,在某个QWidget中当一个组件进行显示后,Qt3DExtras::Qt3DWindow突然自动全屏显示,怎么去掉这个全屏显示

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-11 10:34
    关注

    引自免费微信小程序:皆我百晓生

    面对Qt3DExtras::Qt3DWindow在转换为QWidget后出现的自动全屏显示问题,解决策略通常涉及调整窗口的属性和行为。下面是一个详细的步骤指南,包括代码示例,来帮助你控制窗口的行为,防止其自动进入全屏模式。

    步骤1:创建QWindow容器

    首先,确保你正确地创建了Qt3DWindowQWidget容器。这一步是至关重要的,因为窗口的属性和行为很大程度上取决于容器的设置。

    // 创建 Qt3D 窗口实例
    Qt3DExtras::Qt3DWindow *view = new Qt3DExtras::Qt3DWindow();
    
    // 设置渲染器的场景
    view->setRootEntity(rootEntity); // 假设rootEntity是你的3D场景的根实体
    
    // 创建一个 QWidget 容器来包含 Qt3D 窗口
    QWidget *container = QWidget::createWindowContainer(view);
    

    步骤2:调整窗口属性

    为了防止窗口自动全屏,你需要确保窗口的尺寸和位置被正确设置,并且窗口状态不被错误地设置为全屏。这可以通过直接操作QWidget的属性来实现。

    // 调整容器的大小
    container->setMinimumSize(QSize(400, 400));
    container->setMaximumSize(QSize(400, 400));
    
    // 确保窗口不是全屏
    container->setWindowState(Qt::WindowNoState);
    
    // 显示窗口(非全屏)
    container->show();
    

    步骤3:监听窗口状态变化

    为了进一步防止意外的全屏切换,你可以监听窗口状态的变化,并在状态改变时采取措施恢复到预期的状态。

    QObject::connect(container, &QWidget::windowStateChange, [container](Qt::WindowState oldState) {
        if (container->windowState() == Qt::WindowFullScreen) {
            container->setWindowState(Qt::WindowNoState);
            container->resize(400, 400); // 恢复到非全屏大小
        }
    });
    

    总结

    通过上述步骤,你应该能够有效地控制Qt3DExtras::Qt3DWindow的行为,防止它自动进入全屏模式。记住,关键在于正确配置窗口的初始属性以及监听并响应窗口状态的变化。如果问题仍然存在,检查是否有其他代码片段或事件处理程序可能在不经意间触发窗口状态的更改。

    以上代码片段应该帮助你解决了Qt3DWindow自动全屏的问题。如果遇到任何具体错误或有进一步的需求,可以提供更详细的上下文信息以便于提供更精确的指导。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月11日