gpt4 book ai didi

c++ - 在 QML 中使用 std::string

转载 作者:行者123 更新时间:2023-11-30 01:21:58 25 4
gpt4 key购买 nike

我有一个 STL 代码库,需要在 QtQuick 2.0 应用程序(图形界面)和纯 STL 应用程序(服务器)之间共享。该接口(interface)可以从共享的 STL 代码库派生其类,因此它可以有 Q_PROPERTY s、信号、槽等,但共享数据结构需要保持仅 STL。

我想避免数据重复( std::string -> QString 等)所以我尝试使用 std::string直接在 Q_PROPERTY 内系统。使用 Q_DECLARE_METATYPE(std::string)qRegisterMetaType<std::string>();并声明如下属性:

Q_PROPERTY(QString stldata READ stldata WRITE setSTLData NOTIFY stldataChanged)

使我的代码可以编译,但 QML 仍然不喜欢 std::string

编写文本字段:

Text
{
text: myserviceinterface.stldata
}

产生一个警告说 Unable to assign std::string to QString ,同时附加现有的 QML 字符串:

Text
{
text: "text: " + myserviceinterface.stldata
}

制作Text控制显示奇怪 QVariant(std::string) .

我做错了什么?

最佳答案

恐怕您不能在 QML 中直接使用 std::string,您必须先转换为 QString

通常,您只能将两种 C++ 类型导出到 QML:QObject 派生类和一些内置值类型,请参阅 this documentation page .因此,使用 QString 作为 Q_PROPERTY 的类型之所以有效,是因为它在 QML 引擎中具有特殊的内置支持。无法添加对更多这些值类型 的支持,例如 std::string (*)。

使用 qRegisterMetaType 也无济于事:它只是将 std::string 注册为元类型,这意味着它可以存储在 Q变量。它(大部分)与 QML 集成无关。

所以让你的 getter 返回一个 QString:

    Q_PROPERTY(QString stldata READ stldata WRITE setSTLData NOTIFY stldataChanged)
QString stldata() const {
return QString::fromStdString(myStlString);
}

(*) 实际上有一种方法可以添加对新值类型的支持,但那是 QML 中的私有(private) API,需要直接与底层 Javascript 引擎一起工作。 QtQuick 模块使用该私有(private) API 来添加对例如QMatrix4x4 值类型。

关于c++ - 在 QML 中使用 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17216627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com