【问题标题】:Qt::CustomizeWindowHint breaks createWindowContainer?Qt::CustomizeWindowHint 打破 createWindowContainer?
【发布时间】:2015-07-09 01:40:08
【问题描述】:

我需要在同一个应用程序窗口中使用 QWidgets 和 QML。我可以使用QWidget::createWindowContainer 嵌入 QML。但是,我还需要指定自定义窗口标志。 以前,使用 Qt Quick 2 窗口,这没有问题:

qmlWindow()->setFlags((qmlWindow()->flags() | Qt::CustomizeWindowHint) & ~Qt::WindowTitleHint);

但是,当我这样做时

_window.show();
QWindow *windowHandle = _window.windowHandle();
windowHandle->setFlags((windowHandle->flags() | Qt::CustomizeWindowHint) & ~Qt::WindowTitleHint);

在我的 QWidget 窗口中,仅渲染 QWidget 子视图,使用 QWidget::createWindowContainer 创建的 QML 子视图不会。他们应该在的地方只有空的(白色)空间。 什么可能导致这里的问题?

在它们应该在的地方检测到鼠标点击,“只有”显示不在那里。控制台中没有警告消息。

这发生在 OS X 上,它在 Windows 上运行良好(至少在 8.1 上)。

谢谢!

【问题讨论】:

  • 您是否尝试在显示窗口之前设置窗口标志?我知道 OS X 上的 Qt 中至少有一个错误与更改显示的窗口的窗口标志有关 - bugreports.qt.io/browse/QTBUG-45938
  • 感谢您的评论!是的,我试过了,但 windowHandle() 在这种情况下返回 null。如果我在 show() 之前使用 QWidget::setWindowFlags() 设置它,它根本不会做任何事情(没有视觉故障,但也不是预期的)。调用 winId() 而不是 show() 没有帮助,windowHandle() 仍然返回 null。
  • 我刚刚检查过,它在 Windows 上运行良好。
  • 如果它在 Windows 上运行良好,则更多的建议是它是一个 Qt 错误。为什么你通过 windowHandle() 而不是直接在 (QWidget) 窗口上操作窗口标志?
  • 第一次尝试通过QWidget,它产生了描述的结果,然后我通过windowHandle尝试,它是一样的。

标签: qt qml qwidget


【解决方案1】:

这个问题似乎已在 Qt 5.5.0 中得到修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    相关资源
    最近更新 更多