在C++和 QML 之间交换值
Exchange values between C++ and QML
如何将值从main.cpp
发送到qt快速项目中Qml
文件
transform: Rotation {
id: needleRotation
origin.x: 5; origin.y: 65
angle: -120 + VALUE*2
}
我经常需要 Cpp 的值来制作使用 qt quick 2.0 制作的速度表
我猜该属性是由某个对象生成的。在这种情况下,您可以利用Q_PROPERTY
(请参阅此处)。
按照我提供的链接中显示的内容,您可以按如下方式重写您的类:
class DataProvider : public QObject
{
Q_OBJECT
Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged)
public:
void setValue(qreal newVal) { // <--- do your stuff to update the value
if (newVal != m_value) {
m_value = newVal;
emit valueChanged(); // <--- emit signal to notify QML!
}
}
qreal value() const {
return m_value;
}
signals:
void valueChanged(); // <--- actual signal used as notification in Q_PROPERTY
private:
qreal m_value; // <--- member value which stores the actual value
};
在这里,我们定义了一个属性value
,具有相应的 getter 和 setter(value
和 setValue
resp.)setter 方法发出通知信号,这是在值更改时通知 QML 的基础。
现在,要将对象公开给QML(以及它的属性),只需将其注册为context property
;只需在main中编写:
DataProvider data;
engine.rootContext()->setContextProperty("data", &data); // ALWAYS before setting the QML file...
现在,可以通过 QML 中的名称data
来使用DataProvider
实例data
。只需像这样重写您的 QML:
transform: Rotation {
id: needleRotation
origin.x: 5; origin.y: 65
angle: -120 + data.value * 2
}
每次在 C++ 代码中调用 setValue()
并且值发生更改时,都会发出通知并重新评估绑定。
答案。
对于属性的一般 inf:http://qt-project.org/doc/qt-4.8/qml-extending.html。
在本文中查找Q_PROPERTY:http://qt-project.org/doc/qt-5/properties.html。
第二篇文章是C++/QML开发的必备文章(阅读整篇文章)。以及更新和结构化的信息:http://qt-project.org/doc/qt-5/qml-extending-tutorial-index.html
我阅读了第二个,这仍然有效,但重新访问新文档是有意义的。
如果要直接从函数向 QML 公开单个值main()
请使用 QQmlContext::setContextProperty
。在呼叫之前放置engine.load(...)
:
engine.rootContext()->setContextProperty("VALUE", 10.0);
注意:您可能希望采用某种命名约定来区分上下文属性与局部变量和属性。例如,我以下划线开始所有上下文属性名称,如下所示:_value
。
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- 复制和交换习惯用法与移动操作之间的交互
- C++在 2 个向量向量之间交换向量
- 在两个整数之间交换最右边的N位
- 在C++和Python之间交换数据的最快方法是什么?
- Qml - c++ 类和 QmlRegisterType 创建的类之间的交换日期
- 使用 DLL 在 c++ 和 C# 之间交换字符串
- 加密 和Python之间的Diffie-Hellman密钥交换
- 在QTcpSocket和python套接字之间交换数据的正确方法是什么?
- std::在 std::shared_ptr 之间交换,<A>其中 A 具有动态数组
- 在QT应用程序和Windows Explorer之间剪切和粘贴剪贴板交换
- 在运行C++代码和 python 脚本之间交换信息
- C++中两个向量之间的元素交换
- 如何使用某些MPI命令(或组合命令)之间在两个处理器之间交换2D数组中存储的数据
- 在 C++ 和 Ruby 中的进程之间交换信息
- 在 Ruby 和 C++ 之间交换数据
- 为什么链接到librt会在g++和clang之间交换性能
- 在Go(golang)和C++之间交换数据结构(数组)
- 如何使用协议缓冲区和 ZeroMQ 在 c++ 和 java 之间交换二进制数据
- winsock 和 QTcpServer 之间的套接字交换