Qt5.6_qml_C++插件

Qt5.6_qml_C++插件

网上搜了不少资料,整理下,还处于学习qml中,用于备忘


工程

  1. Qt Quick Application - 应用程序(主程序)
    使用QtCreater建立Qt Quick Application工程
  2. Qt Quick 2 Extension Plugin - 插件
    使用QtCreater建立Qt Quick 2 Extension Plugin 工程

步骤

  1. 使用QtCreater建立Qt Quick Application工程,main.cpp主内容如下:
int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    return app.exec();
}

2 使用QtCreater建立Qt Quick 2 Extension Plugin 工程
2.1 填写Custom QML Extension Plugin Parameters 时,使用MyPlugin作为例子:
obJect class-name: MyPlugin
URI: MyPlugin(这里可以短一点,后面需要文件夹与之对应,如果是真的项目则可以长一点)
2.2 可以看到myplugin_plugin.cpp有:

void MyPluginPlugin::registerTypes(const char *uri)
{
    // @uri MyPlugin
    qmlRegisterType<MyPlugin>(uri, 1, 0, "MyPlugin");
}
"MyPlugin" 这里表明qml写import后使用的 组件名,与obJect class-name类名一致

2.3 加入C++对qml可见的属性,注意要在MyPlugin类里面写,不要在MyPluginPlugin(QT插件需要)

class MyPlugin : public QQuickItem
{
    Q_OBJECT
    Q_DISABLE_COPY(MyPlugin)
//增加一个strText    
    Q_PROPERTY(QString strText READ readStrText)    

public:
    MyPlugin(QQuickItem *parent = 0);
    ~MyPlugin();

//先简单地返回“hello world”
    Q_INVOKABLE QString readStrText() const;
};

QString MyPlugin::readStrText() const
{
    return "hello world";
}

2.4 编译
a)分为debug与release编译,请看自己的工程设置,最好都编出来,编后,可以在编译目当下,分别找到MyPlugind.dll与MyPlugin.dll(多了个d表明是debug);PS:如果编译提示无法找到执行档,是没有关系的

b)重要: 查看工程其他文件qmldir

//表明 import XXX 时的名字,需要一个文件夹与之对应
module MyPlugin
plugin MyPlugin

c)建立相关文件夹
module MyPlugin
表明我们新建立的文件夹名字是MyPlugin,将qmldir,MyPlugind.dll与MyPlugin.dll放进此文件夹下
假设新建文件夹路径为 D:/vsProject/QtProject/MyPlugin/

d)生成插件描述文件qmltypes,也可以用于检查C++插件是否有问题
打开 开始》Qt5.6 for Destop(MinGW 4.9.2 32bit) (QT安装后就会有)

命令: qmlplugindump MyPlugin 1.0 D:/vsProject/QtProject/ > D:/vsProject/QtProject/MyPlugin/plugin.qmltypes
注意:面是 D:/vsProject/QtProject/
可以看到plugin.qmltypes有包含下面的内容,与2.3相对应:

    Property { name: "strText"; type: "string"; isReadonly: true }
    Method { name: "readStrText"; type: "string" }

3 使用Qt的C++插件
回到1建立Qt Quick Application工程,将MyPlugin文件夹放于该工程目录下,添加代码

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine;

    //插件路径
    engine.addImportPath("./");
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    return app.exec();
}

main.qml:

......
import MyPlugin 1.0
Window
{
    visible: true
    width: 1000
    height: 700


    MyPlugin
    {
        id: myPl
    }         
    Rectangle
    {
        width: 200
        height: 200
        border.color: "grey"
        Text
        {
            text: myPl.strText
        }
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值