标签: qquickitem

如何将计算的C++结构公开给Qml

我有以下问题.

我正在开发一个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*类型的属性.我对吗?

c++ qt qobject qml qquickitem

14
推荐指数
1
解决办法
3846
查看次数

如何在QML中制作可调整大小的矩形?

我正在寻找一种简单的方法来创建一个矩形QQuickItem.我想调整大小,并像这样拖动这个矩形的边框(在resizable中QRubberBand找到)

在此输入图像描述

有人有想法吗?

qt qml qt5 qtquick2 qquickitem

12
推荐指数
1
解决办法
7544
查看次数

如何在QQuickPaintedItem中以有效的方式绘制顺序图像

出于某种原因,我需要将 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(...) 绘制该图像。

我在编码过程中遇到了一些问题:

  1. 我尝试用 QThread 替换时间事件以定期从相机获取图像。当我在 QThread 中调用 CameraView::Update() 时,CameraView 不会重新绘制。问题是什么?

  2. 在我的笔记本电脑中,当我让 CameraView 全屏绘制图像时,我发现一个 Python 程序变慢了。是另一种低成本高效的绘画方式吗?

qt qgraphicsscene qquickitem

3
推荐指数
1
解决办法
2553
查看次数

Qt:如何将2个QQuickItems合并为一个,然后将其保存到png中

通过对StackOverflow的讨论,我可以将QML项目中的图像保存到文件中png/jpeg.

如何叠加或合并两个不同的qml图层并将它们合并为一个,以将其保存为png/jpeg?

注意:我可以保存一个QQuickItem.只需要知道如何覆盖2 QQuickItem

qt qimage qml qquickitem

2
推荐指数
1
解决办法
527
查看次数

自定义形状后剪辑自定义QML项目的子项

我有一个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)

c++ qt qml qtquick2 qquickitem

1
推荐指数
1
解决办法
1626
查看次数

标签 统计

qquickitem ×5

qt ×5

qml ×4

c++ ×2

qtquick2 ×2

qgraphicsscene ×1

qimage ×1

qobject ×1

qt5 ×1