我有以下问题.
我正在开发一个C++模型和一个Qml视图,通过控制器连接它们.在我的模型中,我执行多次计算.我还为我的应用程序的用户提供了编写自定义事件处理程序的可能性,用qml编写.现在我遇到了一个问题,我决定使用固定点表示法,并编写了相应的C++类.现在我想向开发人员提供FixedPoint类 - 包括其所有运算符 - 他们决定在Qml中扩展我的应用程序.到目前为止,我提供了所有数据作为QProperties,这是编码指南所要求的.但我愿意接受其他解决方案,以便在我的团队中讨论它们.显然,固定点不是标识,算法依赖于复制它的可能性,这在继承QObject时是不允许的.
所以问题到了:我怎样才能将c ++类/结构体暴露给QML,这不是一个身份?
代码中的一个例子:
struct FixedPoint
{
FixedPoint(FixedPoint&);
FixedPoint& operator=(FixedPoint&);
...
int mantissa;
int exponent;
}
Run Code Online (Sandbox Code Playgroud)
我想在Qml中使用它作为用C++编写的QQuickItem的属性(值):
MyQmlObject{
value{ mantissa: 134; exponent: 3 }
}
Run Code Online (Sandbox Code Playgroud)
然后在javascript中的整个计算中使用属性值,并将其复制多次.所以我认为我不能将值设为FixedPoint*类型的属性.我对吗?
出于某种原因,我需要将 opencv VideoCapture 包装在一个将在 Qt Quick 中使用的类中。
有两个类,一个是Camera,另一个是CameraView。CameraView 继承自 QQuickPaintedItem。
相机类将定期获取图像。它通过 QObject::startTimer(int interval) 实现。(例如,如果网络摄像头的 fps 为 30,则计时器间隔为 1000 / 30 - 8,8 是时间偏差)。一旦 Camera 获取到图像,它会通过调用 CameraView::Update() 通知 CameraView 重新绘制。
而在 CameraView::paint(QPainter *) 中,CameraView 将从 Camera 类获取图像的副本并通过调用 QPainter::drawImage(...) 绘制该图像。
我在编码过程中遇到了一些问题:
我尝试用 QThread 替换时间事件以定期从相机获取图像。当我在 QThread 中调用 CameraView::Update() 时,CameraView 不会重新绘制。问题是什么?
在我的笔记本电脑中,当我让 CameraView 全屏绘制图像时,我发现一个 Python 程序变慢了。是另一种低成本高效的绘画方式吗?
通过对StackOverflow的讨论,我可以将QML项目中的图像保存到文件中png/jpeg.
如何叠加或合并两个不同的qml图层并将它们合并为一个,以将其保存为png/jpeg?
注意:我可以保存一个QQuickItem.只需要知道如何覆盖2 QQuickItem秒
我有一个QQuickItem创建的自定义,我想创建一个圆角的窗口。因此,我实施了QQuickPaintedItem并导出到QML。问题在于该项目的子项正在通过该项目的边界矩形扩展,该矩形是一个矩形,而不是我想要的圆角矩形。外观如下:
这是我的代码:
main.qml
import QtQuick 2.7
import QtQuick.Window 2.2
import mycustomlib 1.0
Window {
id: wnd
width: 300
height: 280
visible: true
flags: Qt.FramelessWindowHint
color: "transparent"
x: 250
y: 250
MyCustomWindow {
id: playerFrame
anchors.fill: parent
radius: 25
Rectangle {
color: "beige"
anchors.margins: 5
anchors.fill: parent
}
}
}
Run Code Online (Sandbox Code Playgroud)
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QUrl>
#include "mycustomwindow.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
qmlRegisterType<MyCustomWindow>("mycustomlib", 1, 0, "MyCustomWindow");
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); …Run Code Online (Sandbox Code Playgroud)