我的主窗口正在创建另一个显示在第二个屏幕上的窗口
ApplicationWindow {
id: mainWindow
property var customerUi
Component.onCompleted: {
customerUi = customerWindow.createObject()
if (ScreenManager.screenCount() > 1)
ScreenManager.setScreen(customerUi, 1)
}
}
两个窗口都需要显示同一个摄像头的视频(它实际上是来自USB适配器的实时馈送,但它的工作方式相同)
Camera {
id: camera
deviceId: "my_device"
}
VideoOutput {
source: camera
}
它在一个窗口中工作正常,但第二个窗口从不显示视频。我猜是因为Camera句柄不能同时被两个界面抓住(或类似的东西)
我尝试使用相同的源只创建一个Camera和两个VideoOutput,但它也不起作用。
我尝试使用ShaderEffect复制视图,但
ShaderEffectSource: sourceItem and ShaderEffectSource must both be children of the same window
如何在两个窗口同时显示视频?
编辑:
显然在Qt 5.3中可以使用ShaderEffectSource https://bugreports.qt.io/browse/QTBUG-43117
但我需要使用Qt 5.5.1
编辑2:
使用ShaderEffectSource在同一窗口中复制视频效果很好,问题只是将它放在另一个窗口中。
答案 0 :(得分:1)
以下是我为解决问题所做的工作:
我创建第三个Window
宽度足以覆盖两个屏幕,并使用ShaderEffectSource
复制窗口。
这只能起作用,因为我的两个Windows在每个屏幕上都是全屏的
我仍然在寻找问题的实际解决方案。
答案 1 :(得分:0)
您可以尝试使用Item::grabToImage(callback, targetSize)
方法将静态Image
填入来自source
的内存中保存数据。你也需要1/60计时器。但我相信它的CPU价格相当昂贵,所以要注意:)
答案 2 :(得分:-1)
在一个main.qml文件中创建两个Window项:
import QtQuick 2.7
import QtQuick.Window 2.2
Item {
Window {
title: qsTr("Hello World")
objectName: "wnd1"
visible: true
width: 640
height: 480
}
Window {
title: qsTr("Hello World 2")
objectName: "wnd2"
visible: true
width: 640
height: 480
}
}
然后,从main.cpp加载它:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
如果组件位于同一个QML文件中,您应该可以轻松地重复使用组件。