【发布时间】: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尝试,它是一样的。